InnoDB Plugin  1.0
Data Structures | Macros | Typedefs | Functions | Variables
pars0pars.h File Reference
#include "univ.i"
#include "que0types.h"
#include "usr0types.h"
#include "pars0types.h"
#include "row0types.h"
#include "trx0types.h"
#include "ut0vec.h"
#include "pars0pars.ic"
Include dependency graph for pars0pars.h:
This graph shows which files directly or indirectly include this file:

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_tpars_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_tpars_variable_declaration (sym_node_t *node, pars_res_word_t *type)
UNIV_INTERN func_node_tpars_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_tpars_op (int func, que_node_t *arg1, que_node_t *arg2)
UNIV_INTERN order_node_tpars_order_by (sym_node_t *column, pars_res_word_t *asc)
UNIV_INTERN sel_node_tpars_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_tpars_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_tpars_column_assignment (sym_node_t *column, que_node_t *exp)
UNIV_INTERN upd_node_tpars_update_statement_start (ibool is_delete, sym_node_t *table_sym, col_assign_node_t *col_assign_list)
UNIV_INTERN upd_node_tpars_update_statement (upd_node_t *node, sym_node_t *cursor_sym, que_node_t *search_cond)
UNIV_INTERN ins_node_tpars_insert_statement (sym_node_t *table_sym, que_node_t *values_list, sel_node_t *select)
UNIV_INTERN sym_node_tpars_parameter_declaration (sym_node_t *node, ulint param_type, pars_res_word_t *type)
UNIV_INTERN elsif_node_tpars_elsif_element (que_node_t *cond, que_node_t *stat_list)
UNIV_INTERN if_node_tpars_if_statement (que_node_t *cond, que_node_t *stat_list, que_node_t *else_part)
UNIV_INTERN for_node_tpars_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_tpars_while_statement (que_node_t *cond, que_node_t *stat_list)
UNIV_INTERN exit_node_tpars_exit_statement (void)
UNIV_INTERN return_node_tpars_return_statement (void)
UNIV_INTERN func_node_tpars_procedure_call (que_node_t *res_word, que_node_t *args)
UNIV_INTERN assign_node_tpars_assignment_statement (sym_node_t *var, que_node_t *val)
UNIV_INTERN fetch_node_tpars_fetch_statement (sym_node_t *cursor, sym_node_t *into_list, sym_node_t *user_func)
UNIV_INTERN open_node_tpars_open_statement (ulint type, sym_node_t *cursor)
UNIV_INTERN row_printf_node_tpars_row_printf_statement (sel_node_t *sel_node)
UNIV_INTERN commit_node_tpars_commit_statement (void)
UNIV_INTERN roll_node_tpars_rollback_statement (void)
UNIV_INTERN sym_node_tpars_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_tpars_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_tpars_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_tpars_procedure_definition (sym_node_t *sym_node, sym_node_t *param_list, que_node_t *stat_list)
UNIV_INTERN que_fork_tpars_stored_procedure_call (sym_node_t *sym_node)
UNIV_INTERN que_thr_tpars_complete_graph_for_exec (que_node_t *node, trx_t *trx, mem_heap_t *heap)
UNIV_INTERN pars_info_tpars_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_tpars_info_get_bound_lit (pars_info_t *info, const char *name)
UNIV_INTERN pars_bound_id_tpars_info_get_bound_id (pars_info_t *info, const char *name)
UNIV_INTERN void pars_lexer_close (void)

Variables

int yydebug
sym_tab_tpars_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

Detailed Description

SQL parser

Created 11/19/1996 Heikki Tuuri

Macro Definition Documentation

#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 Documentation

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.

Function Documentation

UNIV_INTERN assign_node_t* pars_assignment_statement ( sym_node_t var,
que_node_t *  val 
)

Parses an assignment statement.

Returns
assignment statement node in: value to assign
Parameters
varin: 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.

Returns
column assignment node in: value to assign
Parameters
columnin: 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.

Returns
column sym table node in: if not NULL, column is of type NOT NULL.
Parameters
sym_nodein: column node in the symbol table
typein: data type
lenin: length of column, or NULL
is_unsignedin: if not NULL, column is of type UNSIGNED.
UNIV_INTERN commit_node_t* pars_commit_statement ( void  )

Parses a commit statement.

Returns
own: commit node struct
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.

Returns
query thread node to run
Parameters
nodein: root node for an incomplete query graph, or NULL for dummy graph
trxin: transaction handle
heapin: 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.

Returns
index create subgraph in: list of column names
Parameters
unique_defin: not NULL if a unique index
clustered_defin: not NULL if a clustered index
index_symin: index name node in the symbol table
table_symin: 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.

Returns
table create subgraph in: 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
Parameters
table_symin: table name node in the symbol table
column_defsin: 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.

Returns
sym_node in: select node
Parameters
sym_nodein: 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.

Returns
elsif node in: statement list
Parameters
condin: if-condition
UNIV_INTERN exit_node_t* pars_exit_statement ( void  )

Parses an exit statement.

Returns
exit statement node
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.

Returns
fetch statement node in: user function name, or NULL
Parameters
cursorin: cursor node
into_listin: 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.

Returns
for-statement node in: statement list
Parameters
loop_varin: loop variable
loop_start_limitin: loop start expression
loop_end_limitin: loop end expression
UNIV_INTERN func_node_t* pars_func ( que_node_t *  res_word,
que_node_t *  arg 
)

Parses a function expression.

Returns
own: function node in a query tree in: first argument in the argument list
Parameters
res_wordin: function name reserved word
UNIV_INTERN que_node_t* pars_function_declaration ( sym_node_t sym_node)

Parses a function declaration.

Returns
sym_node in: function id node in the symbol table
UNIV_INTERN int pars_get_lex_chars ( char *  buf,
int  max_size 
)

Retrieves characters to the lexical analyzer.

Returns
number of characters copied or 0 on EOF in: maximum number of characters which fit in the buffer
Parameters
bufin/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.

Returns
if-statement node in: else-part statement list
Parameters
condin: if-condition
stat_listin: statement list
UNIV_INTERN void pars_info_add_id ( pars_info_t info,
const char *  name,
const char *  id 
)

Add bound id. in: id

Parameters
infoin: info struct
namein: 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

Parameters
infoin: info struct
namein: 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

Parameters
infoin: info struct
namein: name
addressin: address
lengthin: length of data
typein: 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

Parameters
infoin: info struct
namein: 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

Parameters
infoin: info struct
namein: 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

Parameters
infoin: info struct
namein: function name
funcin: 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

Parameters
infoin: info struct
namein: 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

Parameters
infoin: info struct
namein: name
UNIV_INTERN void pars_info_bind_int8_literal ( pars_info_t info,
const char *  name,
const ib_uint64_t *  val 
)

in: value

Parameters
infoin: info struct
namein: 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.

Parameters
infoin: info struct
namein: name
valin: 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

Parameters
infoin: info struct
namein: name
strin: string
UNIV_INTERN pars_info_t* pars_info_create ( void  )

Create parser info struct.

Returns
own: 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.

Returns
bound id, or NULL if not found in: bound id name to find
Parameters
infoin: 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.

Returns
bound literal, or NULL if not found in: bound literal name to find
Parameters
infoin: 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.

Returns
own: update node in a query tree in: select condition or NULL
Parameters
table_symin: table name node
values_listin: 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.

Returns
own: function node in a query tree in: second argument or NULL for an unary operator
Parameters
funcin: operator token code
arg1in: first argument
UNIV_INTERN open_node_t* pars_open_statement ( ulint  type,
sym_node_t cursor 
)

Parses an open or close cursor statement.

Returns
fetch statement node in: cursor node
Parameters
typein: 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.

Returns
own: order-by node in a query tree in: &pars_asc_token or pars_desc_token
Parameters
columnin: 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.

Returns
own: symbol table node of type SYM_VAR in: pointer to a type token
Parameters
nodein: symbol table node allocated for the id of the parameter
param_typein: 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.

Returns
function node in: argument list
Parameters
res_wordin: 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.

Returns
query fork node in: statement list
Parameters
sym_nodein: procedure id node in the symbol table
param_listin: parameter declaration list
UNIV_INTERN return_node_t* pars_return_statement ( void  )

Parses a return-statement.

Returns
return-statement node
UNIV_INTERN roll_node_t* pars_rollback_statement ( void  )

Parses a rollback statement.

Returns
own: rollback node struct
UNIV_INTERN row_printf_node_t* pars_row_printf_statement ( sel_node_t sel_node)

Parses a row_printf-statement.

Returns
row_printf-statement node in: select node
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.

Returns
own: select node in a query tree in: variables list or NULL
Parameters
select_listin: 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.

Returns
own: select node in a query tree in: NULL or an order-by node
Parameters
select_nodein: select node already containing the select list
table_listin: table list
search_condin: search condition or NULL
for_updatein: NULL or &pars_update_token
consistent_readin: 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.

Returns
own: the query graph in: SQL string
Parameters
infoin: 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.

Returns
query graph in: stored procedure name
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.

Returns
own: update node in a query tree in: search condition or NULL
Parameters
nodein: update node
cursor_symin: 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.

Returns
own: update node in a query tree in: column assignment list, NULL if delete
Parameters
is_deletein: TRUE if delete
table_symin: table name node
UNIV_INTERN sym_node_t* pars_variable_declaration ( sym_node_t node,
pars_res_word_t type 
)

Parses a variable declaration.

Returns
own: symbol table node of type SYM_VAR in: pointer to a type token
Parameters
nodein: 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.

Returns
while-statement node in: statement list
Parameters
condin: while-condition
UNIV_INTERN void yyerror ( const char *  s)

Called by yyparse on error. in: error message string

Variable Documentation

int yydebug
If the following is set TRUE, the parser will emit debugging

information