mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
2662b59306
Docs/manual.texi: Added Innobase documentation configure.in: Incremented version include/my_base.h: Added option for Innobase myisam/mi_check.c: cleanup mysql-test/t/bdb.test: cleanup mysql-test/t/innobase.test: Extended with new tests from bdb.test mysql-test/t/merge.test: Added test of SHOW create mysys/my_init.c: Fix for UNIXWARE 7 scripts/mysql_install_db.sh: Always write how to start mysqld scripts/safe_mysqld.sh: Fixed type sql/ha_innobase.cc: Update to new version sql/ha_innobase.h: Update to new version sql/handler.h: Added 'update_table_comment()' and 'append_create_info()' sql/sql_delete.cc: Fixes for Innobase sql/sql_select.cc: Fixes for Innobase sql/sql_show.cc: Append create information (for MERGE tables) sql/sql_update.cc: Fixes for Innobase
191 lines
5.6 KiB
C
191 lines
5.6 KiB
C
/******************************************************
|
|
SQL parser symbol table
|
|
|
|
(c) 1997 Innobase Oy
|
|
|
|
Created 12/15/1997 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
#ifndef pars0sym_h
|
|
#define pars0sym_h
|
|
|
|
#include "univ.i"
|
|
#include "que0types.h"
|
|
#include "usr0types.h"
|
|
#include "dict0types.h"
|
|
#include "pars0types.h"
|
|
#include "row0types.h"
|
|
|
|
/**********************************************************************
|
|
Creates a symbol table for a single stored procedure or query. */
|
|
|
|
sym_tab_t*
|
|
sym_tab_create(
|
|
/*===========*/
|
|
/* out, own: symbol table */
|
|
mem_heap_t* heap); /* in: memory heap where to create */
|
|
/**********************************************************************
|
|
Frees the memory allocated dynamically AFTER parsing phase for variables
|
|
etc. in the symbol table. Does not free the mem heap where the table was
|
|
originally created. Frees also SQL explicit cursor definitions. */
|
|
|
|
void
|
|
sym_tab_free_private(
|
|
/*=================*/
|
|
sym_tab_t* sym_tab); /* in, own: symbol table */
|
|
/**********************************************************************
|
|
Adds an integer literal to a symbol table. */
|
|
|
|
sym_node_t*
|
|
sym_tab_add_int_lit(
|
|
/*================*/
|
|
/* out: symbol table node */
|
|
sym_tab_t* sym_tab, /* in: symbol table */
|
|
ulint val); /* in: integer value */
|
|
/**********************************************************************
|
|
Adds an string literal to a symbol table. */
|
|
|
|
sym_node_t*
|
|
sym_tab_add_str_lit(
|
|
/*================*/
|
|
/* out: symbol table node */
|
|
sym_tab_t* sym_tab, /* in: symbol table */
|
|
byte* str, /* in: string with no quotes around
|
|
it */
|
|
ulint len); /* in: string length */
|
|
/**********************************************************************
|
|
Adds an SQL null literal to a symbol table. */
|
|
|
|
sym_node_t*
|
|
sym_tab_add_null_lit(
|
|
/*=================*/
|
|
/* out: symbol table node */
|
|
sym_tab_t* sym_tab); /* in: symbol table */
|
|
/**********************************************************************
|
|
Adds an identifier to a symbol table. */
|
|
|
|
sym_node_t*
|
|
sym_tab_add_id(
|
|
/*===========*/
|
|
/* out: symbol table node */
|
|
sym_tab_t* sym_tab, /* in: symbol table */
|
|
byte* name, /* in: identifier name */
|
|
ulint len); /* in: identifier length */
|
|
|
|
#define SYM_CLUST_FIELD_NO 0
|
|
#define SYM_SEC_FIELD_NO 1
|
|
|
|
struct sym_node_struct{
|
|
que_common_t common; /* node type:
|
|
QUE_NODE_SYMBOL */
|
|
/* NOTE: if the data field in 'common.val' is not NULL and the symbol
|
|
table node is not for a temporary column, the memory for the value has
|
|
been allocated from dynamic memory and it should be freed when the
|
|
symbol table is discarded */
|
|
|
|
sym_node_t* indirection; /* pointer to
|
|
another symbol table
|
|
node which contains
|
|
the value for this
|
|
node, NULL otherwise */
|
|
sym_node_t* alias; /* pointer to
|
|
another symbol table
|
|
node for which this
|
|
node is an alias,
|
|
NULL otherwise */
|
|
UT_LIST_NODE_T(sym_node_t) col_var_list; /* list of table
|
|
columns or a list of
|
|
input variables for an
|
|
explicit cursor */
|
|
ibool copy_val; /* TRUE if a column
|
|
and its value should
|
|
be copied to dynamic
|
|
memory when fetched */
|
|
ulint field_nos[2]; /* if a column, in
|
|
the position
|
|
SYM_CLUST_FIELD_NO is
|
|
the field number in the
|
|
clustered index; in
|
|
the position
|
|
SYM_SEC_FIELD_NO
|
|
the field number in the
|
|
non-clustered index to
|
|
use first; if not found
|
|
from the index, then
|
|
ULINT_UNDEFINED */
|
|
ibool resolved; /* TRUE if the
|
|
meaning of a variable
|
|
or a column has been
|
|
resolved; for literals
|
|
this is always TRUE */
|
|
ulint token_type; /* SYM_VAR, SYM_COLUMN,
|
|
SYM_IMPLICIT_VAR,
|
|
SYM_LIT, SYM_TABLE,
|
|
SYM_CURSOR, ... */
|
|
char* name; /* name of an id */
|
|
ulint name_len; /* id name length */
|
|
dict_table_t* table; /* table definition
|
|
if a table id or a
|
|
column id */
|
|
dict_proc_t* procedure_def; /* stored procedure
|
|
definition, if a
|
|
stored procedure name */
|
|
ulint col_no; /* column number if a
|
|
column */
|
|
sel_buf_t* prefetch_buf; /* NULL, or a buffer
|
|
for cached column
|
|
values for prefetched
|
|
rows */
|
|
sel_node_t* cursor_def; /* cursor definition
|
|
select node if a
|
|
named cursor */
|
|
ulint param_type; /* PARS_INPUT,
|
|
PARS_OUTPUT, or
|
|
PARS_NOT_PARAM if not a
|
|
procedure parameter */
|
|
sym_tab_t* sym_table; /* back pointer to
|
|
the symbol table */
|
|
UT_LIST_NODE_T(sym_node_t) sym_list; /* list of symbol
|
|
nodes */
|
|
};
|
|
|
|
struct sym_tab_struct{
|
|
que_t* query_graph;
|
|
/* query graph generated by the
|
|
parser */
|
|
char* sql_string;
|
|
/* SQL string to parse */
|
|
int string_len;
|
|
/* SQL string length */
|
|
int next_char_pos;
|
|
/* position of the next character in
|
|
sql_string to give to the lexical
|
|
analyzer */
|
|
sym_node_list_t sym_list;
|
|
/* list of symbol nodes in the symbol
|
|
table */
|
|
UT_LIST_BASE_NODE_T(func_node_t)
|
|
func_node_list;
|
|
/* list of function nodes in the
|
|
parsed query graph */
|
|
mem_heap_t* heap; /* memory heap from which we can
|
|
allocate space */
|
|
};
|
|
|
|
/* Types of a symbol table entry */
|
|
#define SYM_VAR 91 /* declared parameter or local
|
|
variable of a procedure */
|
|
#define SYM_IMPLICIT_VAR 92 /* storage for a intermediate result
|
|
of a calculation */
|
|
#define SYM_LIT 93 /* literal */
|
|
#define SYM_TABLE 94 /* database table name */
|
|
#define SYM_COLUMN 95 /* database table name */
|
|
#define SYM_CURSOR 96 /* named cursor */
|
|
#define SYM_PROCEDURE_NAME 97 /* stored procedure name */
|
|
#define SYM_INDEX 98 /* database index name */
|
|
|
|
#ifndef UNIV_NONINL
|
|
#include "pars0sym.ic"
|
|
#endif
|
|
|
|
#endif
|