InnoDB Plugin
1.0
|
#include "univ.i"
#include "que0types.h"
#include "usr0types.h"
#include "pars0types.h"
#include "row0types.h"
#include "trx0types.h"
#include "ut0vec.h"
#include "pars0pars.ic"
Go to the source code of this file.
Data Structures | |
struct | pars_info_t |
struct | pars_user_func_t |
struct | pars_bound_lit_t |
struct | pars_bound_id_t |
struct | pars_res_word_t |
struct | func_node_t |
struct | order_node_t |
struct | proc_node_t |
struct | elsif_node_t |
struct | if_node_t |
struct | while_node_t |
struct | for_node_t |
struct | exit_node_t |
struct | return_node_t |
struct | assign_node_t |
struct | col_assign_node_t |
Macros | |
#define | PARS_INPUT 0 |
#define | PARS_OUTPUT 1 |
#define | PARS_NOT_PARAM 2 |
#define | PARS_FUNC_ARITH 1 |
#define | PARS_FUNC_LOGICAL 2 |
#define | PARS_FUNC_CMP 3 |
#define | PARS_FUNC_PREDEFINED 4 |
#define | PARS_FUNC_AGGREGATE 5 |
#define | PARS_FUNC_OTHER 6 |
Typedefs | |
typedef ibool(* | pars_user_func_cb_t )(void *arg, void *user_arg) |
Functions | |
int | yyparse (void) |
UNIV_INTERN que_t * | pars_sql (pars_info_t *info, const char *str) |
UNIV_INTERN int | pars_get_lex_chars (char *buf, int max_size) |
UNIV_INTERN void | yyerror (const char *s) |
UNIV_INTERN sym_node_t * | pars_variable_declaration (sym_node_t *node, pars_res_word_t *type) |
UNIV_INTERN func_node_t * | pars_func (que_node_t *res_word, que_node_t *arg) |
UNIV_INTERN int | pars_like_rebind (sym_node_t *node, const byte *ptr, ulint len) |
UNIV_INTERN func_node_t * | pars_op (int func, que_node_t *arg1, que_node_t *arg2) |
UNIV_INTERN order_node_t * | pars_order_by (sym_node_t *column, pars_res_word_t *asc) |
UNIV_INTERN sel_node_t * | pars_select_list (que_node_t *select_list, sym_node_t *into_list) |
UNIV_INTERN que_node_t * | pars_cursor_declaration (sym_node_t *sym_node, sel_node_t *select_node) |
UNIV_INTERN que_node_t * | pars_function_declaration (sym_node_t *sym_node) |
UNIV_INTERN 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) |
UNIV_INTERN col_assign_node_t * | pars_column_assignment (sym_node_t *column, que_node_t *exp) |
UNIV_INTERN upd_node_t * | pars_update_statement_start (ibool is_delete, sym_node_t *table_sym, col_assign_node_t *col_assign_list) |
UNIV_INTERN upd_node_t * | pars_update_statement (upd_node_t *node, sym_node_t *cursor_sym, que_node_t *search_cond) |
UNIV_INTERN ins_node_t * | pars_insert_statement (sym_node_t *table_sym, que_node_t *values_list, sel_node_t *select) |
UNIV_INTERN sym_node_t * | pars_parameter_declaration (sym_node_t *node, ulint param_type, pars_res_word_t *type) |
UNIV_INTERN elsif_node_t * | pars_elsif_element (que_node_t *cond, que_node_t *stat_list) |
UNIV_INTERN if_node_t * | pars_if_statement (que_node_t *cond, que_node_t *stat_list, que_node_t *else_part) |
UNIV_INTERN 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) |
UNIV_INTERN while_node_t * | pars_while_statement (que_node_t *cond, que_node_t *stat_list) |
UNIV_INTERN exit_node_t * | pars_exit_statement (void) |
UNIV_INTERN return_node_t * | pars_return_statement (void) |
UNIV_INTERN func_node_t * | pars_procedure_call (que_node_t *res_word, que_node_t *args) |
UNIV_INTERN assign_node_t * | pars_assignment_statement (sym_node_t *var, que_node_t *val) |
UNIV_INTERN fetch_node_t * | pars_fetch_statement (sym_node_t *cursor, sym_node_t *into_list, sym_node_t *user_func) |
UNIV_INTERN open_node_t * | pars_open_statement (ulint type, sym_node_t *cursor) |
UNIV_INTERN row_printf_node_t * | pars_row_printf_statement (sel_node_t *sel_node) |
UNIV_INTERN commit_node_t * | pars_commit_statement (void) |
UNIV_INTERN roll_node_t * | pars_rollback_statement (void) |
UNIV_INTERN 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) |
UNIV_INTERN 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) |
UNIV_INTERN 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) |
UNIV_INTERN que_fork_t * | pars_procedure_definition (sym_node_t *sym_node, sym_node_t *param_list, que_node_t *stat_list) |
UNIV_INTERN que_fork_t * | pars_stored_procedure_call (sym_node_t *sym_node) |
UNIV_INTERN que_thr_t * | pars_complete_graph_for_exec (que_node_t *node, trx_t *trx, mem_heap_t *heap) |
UNIV_INTERN pars_info_t * | pars_info_create (void) |
UNIV_INTERN void | pars_info_free (pars_info_t *info) |
UNIV_INTERN void | pars_info_add_literal (pars_info_t *info, const char *name, const void *address, ulint length, ulint type, ulint prtype) |
UNIV_INTERN void | pars_info_add_str_literal (pars_info_t *info, const char *name, const char *str) |
UNIV_INTERN void | pars_info_bind_literal (pars_info_t *info, const char *name, const void *address, ulint length, ulint type, ulint prtype) |
UNIV_INTERN void | pars_info_bind_varchar_literal (pars_info_t *info, const char *name, const byte *str, ulint str_len) |
UNIV_INTERN void | pars_info_bind_int4_literal (pars_info_t *info, const char *name, const ib_uint32_t *val) |
UNIV_INTERN void | pars_info_bind_int8_literal (pars_info_t *info, const char *name, const ib_uint64_t *val) |
UNIV_INTERN void | pars_info_bind_function (pars_info_t *info, const char *name, pars_user_func_cb_t func, void *arg) |
UNIV_INTERN void | pars_info_bind_id (pars_info_t *info, ibool copy_name, const char *name, const char *id) |
UNIV_INTERN void | pars_info_add_int4_literal (pars_info_t *info, const char *name, lint val) |
UNIV_INTERN void | pars_info_add_ull_literal (pars_info_t *info, const char *name, ib_uint64_t val) |
UNIV_INTERN void | pars_info_bind_ull_literal (pars_info_t *info, const char *name, const ib_uint64_t *val)) |
UNIV_INTERN void | pars_info_add_id (pars_info_t *info, const char *name, const char *id) |
UNIV_INTERN pars_bound_lit_t * | pars_info_get_bound_lit (pars_info_t *info, const char *name) |
UNIV_INTERN pars_bound_id_t * | pars_info_get_bound_id (pars_info_t *info, const char *name) |
UNIV_INTERN void | pars_lexer_close (void) |
Variables | |
int | yydebug |
sym_tab_t * | pars_sym_tab_global |
pars_res_word_t | pars_to_char_token |
pars_res_word_t | pars_to_number_token |
pars_res_word_t | pars_to_binary_token |
pars_res_word_t | pars_binary_to_number_token |
pars_res_word_t | pars_substr_token |
pars_res_word_t | pars_replstr_token |
pars_res_word_t | pars_concat_token |
pars_res_word_t | pars_length_token |
pars_res_word_t | pars_instr_token |
pars_res_word_t | pars_sysdate_token |
pars_res_word_t | pars_printf_token |
pars_res_word_t | pars_assert_token |
pars_res_word_t | pars_rnd_token |
pars_res_word_t | pars_rnd_str_token |
pars_res_word_t | pars_count_token |
pars_res_word_t | pars_sum_token |
pars_res_word_t | pars_distinct_token |
pars_res_word_t | pars_binary_token |
pars_res_word_t | pars_blob_token |
pars_res_word_t | pars_int_token |
pars_res_word_t | pars_bigint_token |
pars_res_word_t | pars_char_token |
pars_res_word_t | pars_float_token |
pars_res_word_t | pars_update_token |
pars_res_word_t | pars_asc_token |
pars_res_word_t | pars_desc_token |
pars_res_word_t | pars_open_token |
pars_res_word_t | pars_close_token |
pars_res_word_t | pars_share_token |
pars_res_word_t | pars_unique_token |
pars_res_word_t | pars_clustered_token |
ulint | pars_star_denoter |
UNIV_INTERN que_thr_t | warn_unused_result |
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, ...
typedef ibool(* 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.
UNIV_INTERN assign_node_t* pars_assignment_statement | ( | sym_node_t * | var, |
que_node_t * | val | ||
) |
Parses an assignment statement.
var | in: variable to assign |
UNIV_INTERN 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 |
UNIV_INTERN 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. |
UNIV_INTERN commit_node_t* pars_commit_statement | ( | void | ) |
Parses a commit statement.
UNIV_INTERN que_thr_t* pars_complete_graph_for_exec | ( | que_node_t * | node, |
trx_t * | trx, | ||
mem_heap_t * | heap | ||
) |
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.
node | in: root node for an incomplete query graph, or NULL for dummy graph |
trx | in: transaction handle |
heap | in: memory heap from which allocated |
UNIV_INTERN 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.
unique_def | in: not NULL if a unique index |
clustered_def | in: not NULL if a clustered index |
index_sym | in: index name node in the symbol table |
table_sym | in: table name node in the symbol table |
UNIV_INTERN 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.
table_sym | in: table name node in the symbol table |
column_defs | in: list of column names |
UNIV_INTERN 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 |
UNIV_INTERN elsif_node_t* pars_elsif_element | ( | que_node_t * | cond, |
que_node_t * | stat_list | ||
) |
Parses an elsif element.
cond | in: if-condition |
UNIV_INTERN exit_node_t* pars_exit_statement | ( | void | ) |
Parses an exit statement.
UNIV_INTERN 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.
cursor | in: cursor node |
into_list | in: variables to set, or NULL |
UNIV_INTERN 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 |
UNIV_INTERN 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 |
UNIV_INTERN que_node_t* pars_function_declaration | ( | sym_node_t * | sym_node | ) |
Parses a function declaration.
UNIV_INTERN int pars_get_lex_chars | ( | char * | buf, |
int | max_size | ||
) |
Retrieves characters to the lexical analyzer.
buf | in/out: buffer where to copy |
UNIV_INTERN 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 |
UNIV_INTERN void pars_info_add_id | ( | pars_info_t * | info, |
const char * | name, | ||
const char * | id | ||
) |
Add bound id. in: id
info | in: info struct |
name | in: name |
UNIV_INTERN 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
info | in: info struct |
name | in: name |
UNIV_INTERN 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: precise type, e.g. DATA_UNSIGNED
info | in: info struct |
name | in: name |
address | in: address |
length | in: length of data |
type | in: type, e.g. DATA_FIXBINARY |
UNIV_INTERN 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: string
info | in: info struct |
name | in: name |
UNIV_INTERN void pars_info_add_ull_literal | ( | pars_info_t * | info, |
const char * | name, | ||
ib_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
info | in: info struct |
name | in: name |
UNIV_INTERN void pars_info_bind_function | ( | pars_info_t * | info, |
const char * | name, | ||
pars_user_func_cb_t | func, | ||
void * | arg | ||
) |
Add user function. in: user-supplied argument
info | in: info struct |
name | in: function name |
func | in: function address |
UNIV_INTERN void pars_info_bind_id | ( | pars_info_t * | info, |
ibool | copy_name, | ||
const char * | name, | ||
const char * | id | ||
) |
Add bound id. in: id
info | in: info struct |
name | in: name |
UNIV_INTERN void pars_info_bind_int4_literal | ( | pars_info_t * | info, |
const char * | name, | ||
const ib_uint32_t * | 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
info | in: info struct |
name | in: name |
UNIV_INTERN void pars_info_bind_int8_literal | ( | pars_info_t * | info, |
const char * | name, | ||
const ib_uint64_t * | val | ||
) |
in: value
info | in: info struct |
name | in: name |
UNIV_INTERN void pars_info_bind_ull_literal | ( | pars_info_t * | info, |
const char * | name, | ||
const ib_uint64_t * | val | ||
) |
If the literal value already exists then it rebinds otherwise it creates a new entry.
info | in: info struct |
name | in: name |
val | in: value |
UNIV_INTERN void pars_info_bind_varchar_literal | ( | pars_info_t * | info, |
const char * | name, | ||
const byte * | str, | ||
ulint | str_len | ||
) |
in: string length
info | in: info struct |
name | in: name |
str | in: string |
UNIV_INTERN pars_info_t* pars_info_create | ( | void | ) |
Create parser info struct.
UNIV_INTERN void pars_info_free | ( | pars_info_t * | info | ) |
Free info struct and everything it contains. in, own: info struct
UNIV_INTERN pars_bound_id_t* pars_info_get_bound_id | ( | pars_info_t * | info, |
const char * | name | ||
) |
Get bound id with the given name.
info | in: info struct |
UNIV_INTERN 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 |
UNIV_INTERN 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 |
UNIV_INTERN void pars_lexer_close | ( | void | ) |
Release any resources used by the lexer.
UNIV_INTERN 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 |
UNIV_INTERN 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 |
UNIV_INTERN 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.
column | in: column name |
UNIV_INTERN 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 |
UNIV_INTERN func_node_t* pars_procedure_call | ( | que_node_t * | res_word, |
que_node_t * | args | ||
) |
Parses a procedure call.
res_word | in: procedure name reserved word |
UNIV_INTERN 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 |
UNIV_INTERN return_node_t* pars_return_statement | ( | void | ) |
Parses a return-statement.
UNIV_INTERN roll_node_t* pars_rollback_statement | ( | void | ) |
Parses a rollback statement.
UNIV_INTERN row_printf_node_t* pars_row_printf_statement | ( | sel_node_t * | sel_node | ) |
Parses a row_printf-statement.
UNIV_INTERN 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 |
UNIV_INTERN 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.
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 |
consistent_read | in: NULL or &pars_consistent_token |
UNIV_INTERN 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 |
UNIV_INTERN que_fork_t* pars_stored_procedure_call | ( | sym_node_t * | sym_node | ) |
Parses a stored procedure call, when this is not within another stored procedure, that is, the client issues a procedure call directly. In MySQL/InnoDB, stored InnoDB procedures are invoked via the parsed procedure tree, not via InnoDB SQL, so this function is not used.
UNIV_INTERN 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 |
UNIV_INTERN upd_node_t* pars_update_statement_start | ( | ibool | 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 |
UNIV_INTERN 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 |
UNIV_INTERN while_node_t* pars_while_statement | ( | que_node_t * | cond, |
que_node_t * | stat_list | ||
) |
Parses a while-statement.
cond | in: while-condition |
UNIV_INTERN void yyerror | ( | const char * | s | ) |
Called by yyparse on error. in: error message string
int yydebug |
If the following is set TRUE, the parser will emit debugging
information