* This file is part of the oGRAC project.
* Copyright (c) 2024 Huawei Technologies Co.,Ltd.
*
* oGRAC is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*
* func_parser.h
*
*
* IDENTIFICATION
* src/ogsql/parser/func_parser.h
*
* -------------------------------------------------------------------------
*/
#ifndef __FUNC_PARSER_H__
#define __FUNC_PARSER_H__
#include "ogsql_expr.h"
#include "expr_parser.h"
#include "json/ogsql_json_utils.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct st_windowing_border {
expr_tree_t *expr;
uint32 border_type;
} windowing_border_t;
typedef struct st_trim_list {
expr_tree_t *first_expr;
expr_tree_t *second_expr;
bool8 reverse;
} trim_list_t;
typedef struct st_extract_list {
expr_tree_t *arg;
char *extract_type;
} extract_list_t;
status_t sql_convert_to_cast(sql_stmt_t *stmt, expr_tree_t *expr, word_t *word);
status_t sql_build_func_node(sql_stmt_t *stmt, word_t *word, expr_node_t *node);
status_t sql_build_func_over(sql_stmt_t *stmt, expr_tree_t *expr, word_t *word, expr_node_t **node);
status_t sql_try_fetch_func_arg(sql_stmt_t *stmt, text_t *arg_name);
status_t sql_create_const_string_expr(sql_stmt_t *stmt, expr_tree_t **new_expr, const char *char_str);
status_t sql_build_cast_expr(sql_stmt_t *stmt, source_location_t loc, expr_tree_t *expr, typmode_t *type,
expr_tree_t **res);
status_t sql_create_funccall_expr(sql_stmt_t *stmt, expr_tree_t **expr, galist_t *func_name,
expr_tree_t *arg_list, source_location_t loc);
status_t sql_build_winsort_node_bison(sql_stmt_t *stmt, winsort_args_t **winsort_args, galist_t* group_exprs,
galist_t *sort_items, windowing_args_t *windowing, source_location_t loc);
status_t sql_create_winsort_node_bison(sql_stmt_t *stmt, expr_tree_t *func_expr, expr_node_t *func_node,
winsort_args_t *winsort_args, source_location_t loc);
status_t sql_create_windowing_arg(sql_stmt_t *stmt, windowing_args_t **windowing_args,
windowing_border_t *l_border, windowing_border_t *r_border);
status_t sql_create_cast_convert_expr(sql_stmt_t *stmt, expr_tree_t **expr, expr_tree_t *arg, type_word_t *type,
char *func_name, source_location_t loc);
status_t sql_create_if_funccall_expr(sql_stmt_t *stmt, expr_tree_t **expr, cond_tree_t *cond_tree,
expr_tree_t *first_arg, expr_tree_t *second_arg, source_location_t loc);
status_t sql_create_lnnvl_funccall_expr(sql_stmt_t *stmt, expr_tree_t **expr, cond_tree_t *cond_tree,
source_location_t loc);
status_t sql_create_trim_funccall_expr(sql_stmt_t *stmt, expr_tree_t **expr, trim_list_t *trim,
func_trim_type_t trim_type, source_location_t loc);
status_t sql_create_groupconcat_funccall_expr(sql_stmt_t *stmt, expr_tree_t **expr, expr_tree_t *expr_list,
galist_t *sort_list, char *separator, source_location_t loc);
status_t sql_create_substr_funccall_expr(sql_stmt_t *stmt, expr_tree_t **expr, expr_tree_t *arg_list,
char *func_name, source_location_t loc);
status_t sql_create_extract_funccall_expr(sql_stmt_t *stmt, expr_tree_t **expr, extract_list_t *extract_list,
source_location_t loc);
status_t sql_create_json_func_expr(sql_stmt_t *stmt, expr_tree_t **expr, expr_tree_t *arg_list,
char *func_name, json_func_attr_t attr, source_location_t loc);
#ifdef __cplusplus
}
#endif
#endif