![]()  | 
  
    MySQL 9.5.0
    
   Source Code Documentation 
   | 
 
SQL parser. More...
#include "pars0types.h"#include "que0types.h"#include "row0mysql.h"#include "row0types.h"#include "trx0types.h"#include "univ.i"#include "usr0types.h"#include "ut0vec.h"#include "pars0pars.ic"Go to the source code of this file.
Classes | |
| struct | pars_info_t | 
| Extra information supplied for pars_sql().  More... | |
| struct | pars_user_func_t | 
| User-supplied function and argument.  More... | |
| struct | pars_bound_lit_t | 
| Bound literal.  More... | |
| struct | pars_bound_id_t | 
| Bound identifier.  More... | |
| struct | pars_res_word_t | 
| Struct used to denote a reserved word in a parsing tree.  More... | |
| struct | func_node_t | 
| A predefined function or operator node in a parsing tree; this construct is also used for some non-functions like the assignment ':='.  More... | |
| struct | order_node_t | 
| An order-by node in a select.  More... | |
| struct | proc_node_t | 
| Procedure definition node.  More... | |
| struct | elsif_node_t | 
| elsif-element node  More... | |
| struct | if_node_t | 
| if-statement node  More... | |
| struct | while_node_t | 
| while-statement node  More... | |
| struct | for_node_t | 
| for-loop-statement node  More... | |
| struct | exit_node_t | 
| exit statement node  More... | |
| struct | return_node_t | 
| return-statement node  More... | |
| struct | assign_node_t | 
| Assignment statement node.  More... | |
| struct | col_assign_node_t | 
| Column assignment node.  More... | |
Macros | |
| #define | PARS_INPUT 0 | 
| #define | PARS_OUTPUT 1 | 
| #define | PARS_NOT_PARAM 2 | 
| #define | PARS_FUNC_ARITH 1 | 
| Classes of functions.  More... | |
| #define | PARS_FUNC_LOGICAL 2 | 
| AND, OR, NOT.  More... | |
| #define | PARS_FUNC_CMP 3 | 
| comparison operators  More... | |
| #define | PARS_FUNC_PREDEFINED 4 | 
| TO_NUMBER, SUBSTR, ...  More... | |
| #define | PARS_FUNC_AGGREGATE 5 | 
| COUNT, DISTINCT, SUM.  More... | |
| #define | PARS_FUNC_OTHER 6 | 
| these are not real functions, \ e.g., :=  More... | |
Typedefs | |
| typedef bool(* | pars_user_func_cb_t) (void *arg, void *user_arg) | 
| Type of the user functions.  More... | |
Functions | |
| int | yyparse (void) | 
| void | pars_init () | 
| Initialize for the internal parser.  More... | |
| void | pars_close () | 
| Clean up the internal parser.  More... | |
| que_t * | pars_sql (pars_info_t *info, const char *str) | 
| Parses an SQL string returning the query graph.  More... | |
| int | pars_get_lex_chars (char *buf, size_t max_size) | 
| Retrieves characters to the lexical analyzer.  More... | |
| void | yyerror (const char *s) | 
| Called by yyparse on error.  More... | |
| sym_node_t * | pars_variable_declaration (sym_node_t *node, pars_res_word_t *type) | 
| Parses a variable declaration.  More... | |
| func_node_t * | pars_func (que_node_t *res_word, que_node_t *arg) | 
| Parses a function expression.  More... | |
| int | pars_like_rebind (sym_node_t *node, const byte *ptr, ulint len) | 
| func_node_t * | pars_op (int func, que_node_t *arg1, que_node_t *arg2) | 
| Parses an operator expression.  More... | |
| order_node_t * | pars_order_by (sym_node_t *column, pars_res_word_t *asc) | 
| Parses an ORDER BY clause.  More... | |
| sel_node_t * | pars_select_list (que_node_t *select_list, sym_node_t *into_list) | 
| Parses a select list; creates a query graph node for the whole SELECT statement.  More... | |
| que_node_t * | pars_cursor_declaration (sym_node_t *sym_node, sel_node_t *select_node) | 
| Parses a cursor declaration.  More... | |
| que_node_t * | pars_function_declaration (sym_node_t *sym_node) | 
| Parses a function declaration.  More... | |
| sel_node_t * | pars_select_statement (sel_node_t *select_node, sym_node_t *table_list, que_node_t *search_cond, pars_res_word_t *for_update, pars_res_word_t *consistent_read, order_node_t *order_by) | 
| Parses a select statement.  More... | |
| col_assign_node_t * | pars_column_assignment (sym_node_t *column, que_node_t *exp) | 
| Parses a column assignment in an update.  More... | |
| upd_node_t * | pars_update_statement_start (bool is_delete, sym_node_t *table_sym, col_assign_node_t *col_assign_list) | 
| Parses a delete or update statement start.  More... | |
| upd_node_t * | pars_update_statement (upd_node_t *node, sym_node_t *cursor_sym, que_node_t *search_cond) | 
| Parses an update or delete statement.  More... | |
| ins_node_t * | pars_insert_statement (sym_node_t *table_sym, que_node_t *values_list, sel_node_t *select) | 
| Parses an insert statement.  More... | |
| sym_node_t * | pars_parameter_declaration (sym_node_t *node, ulint param_type, pars_res_word_t *type) | 
| Parses a procedure parameter declaration.  More... | |
| elsif_node_t * | pars_elsif_element (que_node_t *cond, que_node_t *stat_list) | 
| Parses an elsif element.  More... | |
| if_node_t * | pars_if_statement (que_node_t *cond, que_node_t *stat_list, que_node_t *else_part) | 
| Parses an if-statement.  More... | |
| for_node_t * | pars_for_statement (sym_node_t *loop_var, que_node_t *loop_start_limit, que_node_t *loop_end_limit, que_node_t *stat_list) | 
| Parses a for-loop-statement.  More... | |
| while_node_t * | pars_while_statement (que_node_t *cond, que_node_t *stat_list) | 
| Parses a while-statement.  More... | |
| exit_node_t * | pars_exit_statement (void) | 
| Parses an exit statement.  More... | |
| return_node_t * | pars_return_statement (void) | 
| Parses a return-statement.  More... | |
| assign_node_t * | pars_assignment_statement (sym_node_t *var, que_node_t *val) | 
| Parses an assignment statement.  More... | |
| fetch_node_t * | pars_fetch_statement (sym_node_t *cursor, sym_node_t *into_list, sym_node_t *user_func) | 
| Parses a fetch statement.  More... | |
| open_node_t * | pars_open_statement (ulint type, sym_node_t *cursor) | 
| Parses an open or close cursor statement.  More... | |
| commit_node_t * | pars_commit_statement (void) | 
| Parses a commit statement.  More... | |
| roll_node_t * | pars_rollback_statement (void) | 
| Parses a rollback statement.  More... | |
| sym_node_t * | pars_column_def (sym_node_t *sym_node, pars_res_word_t *type, sym_node_t *len, void *is_unsigned, void *is_not_null) | 
| Parses a column definition at a table creation.  More... | |
| tab_node_t * | pars_create_table (sym_node_t *table_sym, sym_node_t *column_defs, sym_node_t *compact, sym_node_t *block_size, void *not_fit_in_memory) | 
| Parses a table creation operation.  More... | |
| ind_node_t * | pars_create_index (pars_res_word_t *unique_def, pars_res_word_t *clustered_def, sym_node_t *index_sym, sym_node_t *table_sym, sym_node_t *column_list) | 
| Parses an index creation operation.  More... | |
| que_fork_t * | pars_procedure_definition (sym_node_t *sym_node, sym_node_t *param_list, que_node_t *stat_list) | 
| Parses a procedure definition.  More... | |
| que_thr_t * | pars_complete_graph_for_exec (que_node_t *node, trx_t *trx, mem_heap_t *heap, row_prebuilt_t *prebuilt) | 
| Completes a query graph by adding query thread and fork nodes above it and prepares the graph for running.  More... | |
| pars_info_t * | pars_info_create (void) | 
| Create parser info struct.  More... | |
| void | pars_info_free (pars_info_t *info) | 
| Free info struct and everything it contains.  More... | |
| void | pars_info_add_literal (pars_info_t *info, const char *name, const void *address, ulint length, ulint type, ulint prtype) | 
| Add bound literal.  More... | |
| void | pars_info_add_str_literal (pars_info_t *info, const char *name, const char *str) | 
| Equivalent to pars_info_add_literal(info, name, str, strlen(str), DATA_VARCHAR, DATA_ENGLISH).  More... | |
| void | pars_info_bind_literal (pars_info_t *info, const char *name, const void *address, ulint length, ulint type, ulint prtype) | 
| void | pars_info_bind_varchar_literal (pars_info_t *info, const char *name, const byte *str, ulint str_len) | 
| If the literal value already exists then it rebinds otherwise it creates a new entry.  More... | |
| void | pars_info_bind_int4_literal (pars_info_t *info, const char *name, const uint32_t *val) | 
| If the literal value already exists then it rebinds otherwise it creates a new entry.  More... | |
| void | pars_info_bind_int8_literal (pars_info_t *info, const char *name, const uint64_t *val) | 
| If the literal value already exists then it rebinds otherwise it creates a new entry.  More... | |
| void | pars_info_bind_function (pars_info_t *info, const char *name, pars_user_func_cb_t func, void *arg) | 
| Add user function.  More... | |
| void | pars_info_bind_id (pars_info_t *info, bool copy_name, const char *name, const char *id) | 
| Add bound id.  More... | |
| void | pars_info_add_int4_literal (pars_info_t *info, const char *name, lint val) | 
| Equivalent to:  More... | |
| void | pars_info_add_ull_literal (pars_info_t *info, const char *name, uint64_t val) | 
| Equivalent to:  More... | |
| void | pars_info_bind_ull_literal (pars_info_t *info, const char *name, const uint64_t *val) | 
| If the literal value already exists then it rebinds otherwise it creates a new entry.  More... | |
| void | pars_info_add_id (pars_info_t *info, const char *name, const char *id) | 
| Add bound id.  More... | |
| pars_bound_lit_t * | pars_info_get_bound_lit (pars_info_t *info, const char *name) | 
| Get bound literal with the given name.  More... | |
| pars_bound_id_t * | pars_info_get_bound_id (pars_info_t *info, const char *name) | 
| Get bound identifier with the given name.  More... | |
| void | pars_lexer_close (void) | 
| Release any resources used by the lexer.  More... | |
SQL parser.
Created 11/19/1996 Heikki Tuuri
| #define PARS_FUNC_AGGREGATE 5 | 
COUNT, DISTINCT, SUM.
| #define PARS_FUNC_ARITH 1 | 
Classes of functions.
+, -, *, /
| #define PARS_FUNC_CMP 3 | 
comparison operators
| #define PARS_FUNC_LOGICAL 2 | 
AND, OR, NOT.
| #define PARS_FUNC_OTHER 6 | 
these are not real functions, \ e.g., :=
| #define PARS_FUNC_PREDEFINED 4 | 
TO_NUMBER, SUBSTR, ...
| #define PARS_INPUT 0 | 
| #define PARS_NOT_PARAM 2 | 
| #define PARS_OUTPUT 1 | 
| typedef bool(* pars_user_func_cb_t) (void *arg, void *user_arg) | 
Type of the user functions.
The first argument is always InnoDB-supplied and varies in type, while 'user_arg' is a user-supplied argument. The meaning of the return type also varies. See the individual use cases, e.g. the FETCH statement, for details on them.
| assign_node_t * pars_assignment_statement | ( | sym_node_t * | var, | 
| que_node_t * | val | ||
| ) | 
Parses an assignment statement.
| var | in: variable to assign | 
| val | in: value to assign | 
| void pars_close | ( | ) | 
Clean up the internal parser.
| col_assign_node_t * pars_column_assignment | ( | sym_node_t * | column, | 
| que_node_t * | exp | ||
| ) | 
Parses a column assignment in an update.
| column | in: column to assign | 
| exp | in: value to assign | 
| sym_node_t * pars_column_def | ( | sym_node_t * | sym_node, | 
| pars_res_word_t * | type, | ||
| sym_node_t * | len, | ||
| void * | is_unsigned, | ||
| void * | is_not_null | ||
| ) | 
Parses a column definition at a table creation.
| sym_node | in: column node in the symbol table | 
| type | in: data type | 
| len | in: length of column, or NULL | 
| is_unsigned | in: if not NULL, column is of type UNSIGNED. | 
| is_not_null | in: if not NULL, column is of type NOT NULL. | 
| commit_node_t * pars_commit_statement | ( | void | ) | 
Parses a commit statement.
| que_thr_t * pars_complete_graph_for_exec | ( | que_node_t * | node, | 
| trx_t * | trx, | ||
| mem_heap_t * | heap, | ||
| row_prebuilt_t * | prebuilt | ||
| ) | 
Completes a query graph by adding query thread and fork nodes above it and prepares the graph for running.
The fork created is of type QUE_FORK_MYSQL_INTERFACE.
| [in] | node | root node for an incomplete query graph, or NULL for dummy graph | 
| [in] | trx | transaction handle | 
| [in] | heap | memory heap from which allocated | 
| [in] | prebuilt | row prebuilt structure | 
| ind_node_t * pars_create_index | ( | pars_res_word_t * | unique_def, | 
| pars_res_word_t * | clustered_def, | ||
| sym_node_t * | index_sym, | ||
| sym_node_t * | table_sym, | ||
| sym_node_t * | column_list | ||
| ) | 
Parses an index creation operation.
| [in] | unique_def | Not NULL if a unique index. | 
| [in] | clustered_def | Not NULL if a clustered index. | 
| [in] | index_sym | Index name node in the symbol table. | 
| [in] | table_sym | Table name node in the symbol table. | 
| [in] | column_list | List of column names. | 
| tab_node_t * pars_create_table | ( | sym_node_t * | table_sym, | 
| sym_node_t * | column_defs, | ||
| sym_node_t * | compact, | ||
| sym_node_t * | block_size, | ||
| void * | not_fit_in_memory | ||
| ) | 
Parses a table creation operation.
| [in] | table_sym | table name node in the symbol table | 
| [in] | column_defs | list of column names | 
| [in] | not_fit_in_memory | a non-NULL pointer means that this is a table which in simulations should be simulated as not fitting in memory; thread is put to sleep to simulate disk accesses; NOTE that this flag is not stored to the data dictionary on disk, and the database will forget about non-NULL value if it has to reload the table definition from disk | 
| [in] | compact | non-NULL if COMPACT table | 
| [in] | block_size | block size (can be NULL) | 
| que_node_t * pars_cursor_declaration | ( | sym_node_t * | sym_node, | 
| sel_node_t * | select_node | ||
| ) | 
Parses a cursor declaration.
| sym_node | in: cursor id node in the symbol table | 
| select_node | in: select node | 
| elsif_node_t * pars_elsif_element | ( | que_node_t * | cond, | 
| que_node_t * | stat_list | ||
| ) | 
Parses an elsif element.
| cond | in: if-condition | 
| stat_list | in: statement list | 
| exit_node_t * pars_exit_statement | ( | void | ) | 
Parses an exit statement.
| fetch_node_t * pars_fetch_statement | ( | sym_node_t * | cursor, | 
| sym_node_t * | into_list, | ||
| sym_node_t * | user_func | ||
| ) | 
Parses a fetch statement.
into_list or user_func (but not both) must be non-NULL.
into_list or user_func (but not both) must be non-NULL.
| cursor | in: cursor node | 
| into_list | in: variables to set, or NULL | 
| user_func | in: user function name, or NULL | 
| for_node_t * pars_for_statement | ( | sym_node_t * | loop_var, | 
| que_node_t * | loop_start_limit, | ||
| que_node_t * | loop_end_limit, | ||
| que_node_t * | stat_list | ||
| ) | 
Parses a for-loop-statement.
| loop_var | in: loop variable | 
| loop_start_limit | in: loop start expression | 
| loop_end_limit | in: loop end expression | 
| stat_list | in: statement list | 
| func_node_t * pars_func | ( | que_node_t * | res_word, | 
| que_node_t * | arg | ||
| ) | 
Parses a function expression.
| res_word | in: function name reserved word | 
| arg | in: first argument in the argument list | 
| que_node_t * pars_function_declaration | ( | sym_node_t * | sym_node | ) | 
Parses a function declaration.
| sym_node | in: function id node in the symbol table | 
| int pars_get_lex_chars | ( | char * | buf, | 
| size_t | max_size | ||
| ) | 
Retrieves characters to the lexical analyzer.
| [in,out] | buf | Buffer where to copy | 
| [in] | max_size | Maximum number of characters which fit in the buffer | 
| if_node_t * pars_if_statement | ( | que_node_t * | cond, | 
| que_node_t * | stat_list, | ||
| que_node_t * | else_part | ||
| ) | 
Parses an if-statement.
| cond | in: if-condition | 
| stat_list | in: statement list | 
| else_part | in: else-part statement list or elsif element list | 
| void pars_info_add_id | ( | pars_info_t * | info, | 
| const char * | name, | ||
| const char * | id | ||
| ) | 
Add bound id.
| [in] | info | info struct | 
| [in] | name | name | 
| [in] | id | id | 
| void pars_info_add_int4_literal | ( | pars_info_t * | info, | 
| const char * | name, | ||
| lint | val | ||
| ) | 
Equivalent to:
char buf[4]; mach_write_to_4(buf, val); pars_info_add_literal(info, name, buf, 4, DATA_INT, 0);
except that the buffer is dynamically allocated from the info struct's heap. in: value
char buf[4]; mach_write_to_4(buf, val); pars_info_add_literal(info, name, buf, 4, DATA_INT, 0);
except that the buffer is dynamically allocated from the info struct's heap.
| info | in: info struct | 
| name | in: name | 
| val | in: value | 
| void pars_info_add_literal | ( | pars_info_t * | info, | 
| const char * | name, | ||
| const void * | address, | ||
| ulint | length, | ||
| ulint | type, | ||
| ulint | prtype | ||
| ) | 
Add bound literal.
| [in] | info | Info struct | 
| [in] | name | Name | 
| [in] | address | Address | 
| [in] | length | Length of data | 
| [in] | type | Type, e.g. data_fixbinary | 
| [in] | prtype | Precise type, e.g. data_unsigned | 
| void pars_info_add_str_literal | ( | pars_info_t * | info, | 
| const char * | name, | ||
| const char * | str | ||
| ) | 
Equivalent to pars_info_add_literal(info, name, str, strlen(str), DATA_VARCHAR, DATA_ENGLISH).
| [in] | info | Info struct | 
| [in] | name | Name | 
| [in] | str | String | 
| info | in: info struct | 
| name | in: name | 
| str | in: string | 
| void pars_info_add_ull_literal | ( | pars_info_t * | info, | 
| const char * | name, | ||
| uint64_t | val | ||
| ) | 
Equivalent to:
char buf[8]; mach_write_to_8(buf, val); pars_info_add_literal(info, name, buf, 8, DATA_FIXBINARY, 0);
except that the buffer is dynamically allocated from the info struct's heap. in: value
char buf[8]; mach_write_to_8(buf, val); pars_info_add_literal(info, name, buf, 8, DATA_FIXBINARY, 0);
except that the buffer is dynamically allocated from the info struct's heap.
| info | in: info struct | 
| name | in: name | 
| val | in: value | 
| void pars_info_bind_function | ( | pars_info_t * | info, | 
| const char * | name, | ||
| pars_user_func_cb_t | func, | ||
| void * | arg | ||
| ) | 
Add user function.
| [in] | info | Info struct | 
| [in] | name | Function name | 
| [in] | func | Function address | 
| [in] | arg | User-supplied argument | 
| void pars_info_bind_id | ( | pars_info_t * | info, | 
| bool | copy_name, | ||
| const char * | name, | ||
| const char * | id | ||
| ) | 
Add bound id.
| [in] | info | info struct | 
| [in] | copy_name | copy name if true | 
| [in] | name | name | 
| [in] | id | id | 
| void pars_info_bind_int4_literal | ( | pars_info_t * | info, | 
| const char * | name, | ||
| const uint32_t * | val | ||
| ) | 
If the literal value already exists then it rebinds otherwise it creates a new entry.
| [in] | info | Info struct | 
| [in] | name | Name | 
| [in] | val | Value | 
| void pars_info_bind_int8_literal | ( | pars_info_t * | info, | 
| const char * | name, | ||
| const uint64_t * | val | ||
| ) | 
If the literal value already exists then it rebinds otherwise it creates a new entry.
| [in] | info | Info struct | 
| [in] | name | Name | 
| [in] | val | Value | 
| void pars_info_bind_literal | ( | pars_info_t * | info, | 
| const char * | name, | ||
| const void * | address, | ||
| ulint | length, | ||
| ulint | type, | ||
| ulint | prtype | ||
| ) | 
| void pars_info_bind_ull_literal | ( | pars_info_t * | info, | 
| const char * | name, | ||
| const uint64_t * | val | ||
| ) | 
If the literal value already exists then it rebinds otherwise it creates a new entry.
| [in] | info | Info struct | 
| [in] | name | Name | 
| [in] | val | Value | 
| void pars_info_bind_varchar_literal | ( | pars_info_t * | info, | 
| const char * | name, | ||
| const byte * | str, | ||
| ulint | str_len | ||
| ) | 
If the literal value already exists then it rebinds otherwise it creates a new entry.
| [in] | info | Info struct | 
| [in] | name | Name | 
| [in] | str | String | 
| [in] | str_len | String length | 
| pars_info_t * pars_info_create | ( | void | ) | 
Create parser info struct.
| void pars_info_free | ( | pars_info_t * | info | ) | 
Free info struct and everything it contains.
in, own: info struct
| info | in, own: info struct | 
| pars_bound_id_t * pars_info_get_bound_id | ( | pars_info_t * | info, | 
| const char * | name | ||
| ) | 
Get bound identifier with the given name.
| [in] | info | info struct | 
| [in] | name | bound id name to find | 
| pars_bound_lit_t * pars_info_get_bound_lit | ( | pars_info_t * | info, | 
| const char * | name | ||
| ) | 
Get bound literal with the given name.
| info | in: info struct | 
| name | in: bound literal name to find | 
| void pars_init | ( | ) | 
Initialize for the internal parser.
| ins_node_t * pars_insert_statement | ( | sym_node_t * | table_sym, | 
| que_node_t * | values_list, | ||
| sel_node_t * | select | ||
| ) | 
Parses an insert statement.
| table_sym | in: table name node | 
| values_list | in: value expression list or NULL | 
| select | in: select condition or NULL | 
| void pars_lexer_close | ( | void | ) | 
Release any resources used by the lexer.
| int pars_like_rebind | ( | sym_node_t * | node, | 
| const byte * | ptr, | ||
| ulint | len | ||
| ) | 
| func_node_t * pars_op | ( | int | func, | 
| que_node_t * | arg1, | ||
| que_node_t * | arg2 | ||
| ) | 
Parses an operator expression.
| func | in: operator token code | 
| arg1 | in: first argument | 
| arg2 | in: second argument or NULL for an unary operator | 
| open_node_t * pars_open_statement | ( | ulint | type, | 
| sym_node_t * | cursor | ||
| ) | 
Parses an open or close cursor statement.
| type | in: ROW_SEL_OPEN_CURSOR or ROW_SEL_CLOSE_CURSOR | 
| cursor | in: cursor node | 
| order_node_t * pars_order_by | ( | sym_node_t * | column, | 
| pars_res_word_t * | asc | ||
| ) | 
Parses an ORDER BY clause.
Order by a single column only is supported.
Order by a single column only is supported.
| column | in: column name | 
| asc | in: &pars_asc_token or pars_desc_token | 
| sym_node_t * pars_parameter_declaration | ( | sym_node_t * | node, | 
| ulint | param_type, | ||
| pars_res_word_t * | type | ||
| ) | 
Parses a procedure parameter declaration.
| node | in: symbol table node allocated for the id of the parameter | 
| param_type | in: PARS_INPUT or PARS_OUTPUT | 
| type | in: pointer to a type token | 
| que_fork_t * pars_procedure_definition | ( | sym_node_t * | sym_node, | 
| sym_node_t * | param_list, | ||
| que_node_t * | stat_list | ||
| ) | 
Parses a procedure definition.
| sym_node | in: procedure id node in the symbol table | 
| param_list | in: parameter declaration list | 
| stat_list | in: statement list | 
| return_node_t * pars_return_statement | ( | void | ) | 
Parses a return-statement.
| roll_node_t * pars_rollback_statement | ( | void | ) | 
Parses a rollback statement.
| sel_node_t * pars_select_list | ( | que_node_t * | select_list, | 
| sym_node_t * | into_list | ||
| ) | 
Parses a select list; creates a query graph node for the whole SELECT statement.
| select_list | in: select list | 
| into_list | in: variables list or NULL | 
| sel_node_t * pars_select_statement | ( | sel_node_t * | select_node, | 
| sym_node_t * | table_list, | ||
| que_node_t * | search_cond, | ||
| pars_res_word_t * | for_update, | ||
| pars_res_word_t * | lock_shared, | ||
| order_node_t * | order_by | ||
| ) | 
Parses a select statement.
| select_node | in: select node already containing the select list | 
| table_list | in: table list | 
| search_cond | in: search condition or NULL | 
| for_update | in: NULL or &pars_update_token | 
| lock_shared | in: NULL or &pars_share_token | 
| order_by | in: NULL or an order-by node | 
| que_t * pars_sql | ( | pars_info_t * | info, | 
| const char * | str | ||
| ) | 
Parses an SQL string returning the query graph.
| info | in: extra information, or NULL | 
| str | in: SQL string | 
| upd_node_t * pars_update_statement | ( | upd_node_t * | node, | 
| sym_node_t * | cursor_sym, | ||
| que_node_t * | search_cond | ||
| ) | 
Parses an update or delete statement.
| node | in: update node | 
| cursor_sym | in: pointer to a cursor entry in the symbol table or NULL | 
| search_cond | in: search condition or NULL | 
| upd_node_t * pars_update_statement_start | ( | bool | is_delete, | 
| sym_node_t * | table_sym, | ||
| col_assign_node_t * | col_assign_list | ||
| ) | 
Parses a delete or update statement start.
| is_delete | in: true if delete | 
| table_sym | in: table name node | 
| col_assign_list | in: column assignment list, NULL if delete | 
| sym_node_t * pars_variable_declaration | ( | sym_node_t * | node, | 
| pars_res_word_t * | type | ||
| ) | 
Parses a variable declaration.
| node | in: symbol table node allocated for the id of the variable | 
| type | in: pointer to a type token | 
| while_node_t * pars_while_statement | ( | que_node_t * | cond, | 
| que_node_t * | stat_list | ||
| ) | 
Parses a while-statement.
| cond | in: while-condition | 
| stat_list | in: statement list | 
| void yyerror | ( | const char * | s | ) | 
Called by yyparse on error.
in: error message string
| s | in: error message string | 
| int yyparse | ( | void | ) | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
Mutex to protect the sql parser.
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
Global variable used to denote the '*' in SELECT * FROM.
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
      
  | 
  extern | 
If the following is set true, the parser will emit debugging information.