📄 pars0pars.h
字号:
/******************************************************SQL parser(c) 1996 Innobase OyCreated 11/19/1996 Heikki Tuuri*******************************************************/#ifndef pars0pars_h#define pars0pars_h#include "univ.i"#include "que0types.h"#include "usr0types.h"#include "pars0types.h"#include "row0types.h"#include "trx0types.h"extern int yydebug;/* If the following is set TRUE, the lexer will print the SQL stringas it tokenizes it */#ifdef UNIV_SQL_DEBUGextern ibool pars_print_lexed;#endif /* UNIV_SQL_DEBUG *//* Global variable used while parsing a single procedure or query : the code isNOT re-entrant */extern sym_tab_t* pars_sym_tab_global;extern pars_res_word_t pars_to_char_token;extern pars_res_word_t pars_to_number_token;extern pars_res_word_t pars_to_binary_token;extern pars_res_word_t pars_binary_to_number_token;extern pars_res_word_t pars_substr_token;extern pars_res_word_t pars_replstr_token;extern pars_res_word_t pars_concat_token;extern pars_res_word_t pars_length_token;extern pars_res_word_t pars_instr_token;extern pars_res_word_t pars_sysdate_token;extern pars_res_word_t pars_printf_token;extern pars_res_word_t pars_assert_token;extern pars_res_word_t pars_rnd_token;extern pars_res_word_t pars_rnd_str_token;extern pars_res_word_t pars_count_token;extern pars_res_word_t pars_sum_token;extern pars_res_word_t pars_distinct_token;extern pars_res_word_t pars_int_token;extern pars_res_word_t pars_char_token;extern pars_res_word_t pars_float_token;extern pars_res_word_t pars_update_token;extern pars_res_word_t pars_asc_token;extern pars_res_word_t pars_desc_token;extern pars_res_word_t pars_open_token;extern pars_res_word_t pars_close_token;extern pars_res_word_t pars_consistent_token;extern pars_res_word_t pars_unique_token;extern pars_res_word_t pars_clustered_token;extern ulint pars_star_denoter; /* Procedure parameter types */#define PARS_INPUT 0#define PARS_OUTPUT 1#define PARS_NOT_PARAM 2intyyparse(void);/*****************************************************************Parses an SQL string returning the query graph. */que_t*pars_sql(/*=====*/ /* out, own: the query graph */ const char* str); /* in: SQL string *//*****************************************************************Retrieves characters to the lexical analyzer. */voidpars_get_lex_chars(/*===============*/ char* buf, /* in/out: buffer where to copy */ int* result, /* out: number of characters copied or EOF */ int max_size); /* in: maximum number of characters which fit in the buffer *//*****************************************************************Called by yyparse on error. */voidyyerror(/*====*/ const char* s); /* in: error message string *//*************************************************************************Parses a variable declaration. */sym_node_t*pars_variable_declaration(/*======================*/ /* out, own: symbol table node of type SYM_VAR */ sym_node_t* node, /* in: symbol table node allocated for the id of the variable */ pars_res_word_t* type); /* in: pointer to a type token *//*************************************************************************Parses a function expression. */func_node_t*pars_func(/*======*/ /* out, own: function node in a query tree */ que_node_t* res_word,/* in: function name reserved word */ que_node_t* arg); /* in: first argument in the argument list *//*************************************************************************Parses an operator expression. */func_node_t*pars_op(/*====*/ /* out, own: function node in a query tree */ int func, /* in: operator token code */ que_node_t* arg1, /* in: first argument */ que_node_t* arg2); /* in: second argument or NULL for an unary operator *//*************************************************************************Parses an ORDER BY clause. Order by a single column only is supported. */order_node_t*pars_order_by(/*==========*/ /* out, own: order-by node in a query tree */ sym_node_t* column, /* in: column name */ pars_res_word_t* asc); /* in: &pars_asc_token or pars_desc_token *//*************************************************************************Parses a select list; creates a query graph node for the whole SELECTstatement. */sel_node_t*pars_select_list(/*=============*/ /* out, own: select node in a query tree */ que_node_t* select_list, /* in: select list */ sym_node_t* into_list); /* in: variables list or NULL *//*************************************************************************Parses a cursor declaration. */que_node_t*pars_cursor_declaration(/*====================*/ /* out: sym_node */ sym_node_t* sym_node, /* in: cursor id node in the symbol table */ sel_node_t* select_node); /* in: select node *//*************************************************************************Parses a select statement. */sel_node_t*pars_select_statement(/*==================*/ /* out, own: select node in a query tree */ sel_node_t* select_node, /* in: select node already containing the select list */ sym_node_t* table_list, /* in: table list */ que_node_t* search_cond, /* in: search condition or NULL */ pars_res_word_t* for_update, /* in: NULL or &pars_update_token */ pars_res_word_t* consistent_read,/* in: NULL or &pars_consistent_token */ order_node_t* order_by); /* in: NULL or an order-by node *//*************************************************************************Parses a column assignment in an update. */col_assign_node_t*pars_column_assignment(/*===================*/ /* out: column assignment node */ sym_node_t* column, /* in: column to assign */ que_node_t* exp); /* in: value to assign *//*************************************************************************Parses a delete or update statement start. */upd_node_t*pars_update_statement_start(/*========================*/ /* out, own: update node in a query tree */ ibool is_delete, /* in: TRUE if delete */ sym_node_t* table_sym, /* in: table name node */ col_assign_node_t* col_assign_list);/* in: column assignment list, NULL if delete */ /*************************************************************************Parses an update or delete statement. */upd_node_t*pars_update_statement(/*==================*/ /* out, own: update node in a query tree */ upd_node_t* node, /* in: update node */ sym_node_t* cursor_sym, /* in: pointer to a cursor entry in the symbol table or NULL */ que_node_t* search_cond); /* in: search condition or NULL *//*************************************************************************Parses an insert statement. */ins_node_t*pars_insert_statement(/*==================*/ /* out, own: update node in a query tree */ sym_node_t* table_sym, /* in: table name node */ que_node_t* values_list, /* in: value expression list or NULL */ sel_node_t* select); /* in: select condition or NULL *//*************************************************************************Parses a procedure parameter declaration. */sym_node_t*pars_parameter_declaration(/*=======================*/ /* out, own: symbol table node of type SYM_VAR */ sym_node_t* node, /* in: symbol table node allocated for the id of the parameter */ ulint param_type, /* in: PARS_INPUT or PARS_OUTPUT */ pars_res_word_t* type); /* in: pointer to a type token *//*************************************************************************Parses an elsif element. */elsif_node_t*pars_elsif_element(/*===============*/ /* out: elsif node */ que_node_t* cond, /* in: if-condition */ que_node_t* stat_list); /* in: statement list *//*************************************************************************Parses an if-statement. */if_node_t*pars_if_statement(/*==============*/ /* out: if-statement node */ que_node_t* cond, /* in: if-condition */ que_node_t* stat_list, /* in: statement list */ que_node_t* else_part); /* in: else-part statement list *//*************************************************************************Parses a for-loop-statement. */for_node_t*pars_for_statement(/*===============*/ /* out: for-statement node */ sym_node_t* loop_var, /* in: loop variable */ que_node_t* loop_start_limit,/* in: loop start expression */ que_node_t* loop_end_limit, /* in: loop end expression */ que_node_t* stat_list); /* in: statement list *//*************************************************************************Parses a while-statement. */while_node_t*pars_while_statement(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -