mariadb/innobase/pars/pars0sym.c
unknown 6b237533f1 InnoDB cleanup: Add const qualifiers to many char* arguments
innobase/dict/dict0dict.c:
  Replace char* arguments with const char*
innobase/dict/dict0load.c:
  Replace char* arguments with const char*
innobase/dict/dict0mem.c:
  Replace char* arguments with const char*
innobase/fil/fil0fil.c:
  Replace char* arguments with const char*
innobase/include/data0data.h:
  dfield_set_data(): add const qualifier
innobase/include/data0data.ic:
  dfield_set_data(): add const qualifier
  (temporarily shut up compiler warnings)
innobase/include/dict0dict.h:
  Replace char* arguments with const char*
innobase/include/dict0dict.ic:
  Replace char* arguments with const char*
innobase/include/dict0load.h:
  Replace char* arguments with const char*
innobase/include/dict0mem.h:
  Replace char* arguments with const char*
innobase/include/fil0fil.h:
  Replace char* arguments with const char*
innobase/include/os0file.h:
  Replace char* arguments with const char*
innobase/include/os0sync.h:
  Replace char* arguments with const char*
innobase/include/pars0pars.h:
  Replace char* arguments with const char*
innobase/include/pars0sym.h:
  Replace char* arguments with const char*
innobase/include/row0mysql.h:
  Replace char* arguments with const char*
innobase/include/row0sel.h:
  Replace char* arguments with const char*
innobase/include/trx0roll.h:
  Replace char* arguments with const char*
innobase/include/trx0sys.h:
  Replace char* arguments with const char*
innobase/include/trx0trx.h:
  Replace char* arguments with const char*
innobase/include/ut0rnd.h:
  Replace char* arguments with const char*
innobase/include/ut0rnd.ic:
  Replace char* arguments with const char*
innobase/include/ut0ut.h:
  Remove unused function ut_printf()
innobase/os/os0file.c:
  Replace char* arguments with const char*
innobase/os/os0sync.c:
  Replace char* arguments with const char*
innobase/pars/pars0pars.c:
  Replace char* arguments with const char*
innobase/pars/pars0sym.c:
  Use mem_heap_strdupl() instead of mem_heap_alloc() and memcpy()
innobase/row/row0mysql.c:
  Replace char* arguments with const char*
innobase/row/row0sel.c:
  Replace char* arguments with const char*
innobase/trx/trx0roll.c:
  Replace char* arguments with const char*
innobase/trx/trx0sys.c:
  Replace char* arguments with const char*
2004-05-17 14:40:31 +03:00

237 lines
5.1 KiB
C

/******************************************************
SQL parser symbol table
(c) 1997 Innobase Oy
Created 12/15/1997 Heikki Tuuri
*******************************************************/
#include "pars0sym.h"
#ifdef UNIV_NONINL
#include "pars0sym.ic"
#endif
#include "mem0mem.h"
#include "data0type.h"
#include "data0data.h"
#include "pars0pars.h"
#include "que0que.h"
#include "eval0eval.h"
#include "row0sel.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 */
{
sym_tab_t* sym_tab;
sym_tab = mem_heap_alloc(heap, sizeof(sym_tab_t));
UT_LIST_INIT(sym_tab->sym_list);
UT_LIST_INIT(sym_tab->func_node_list);
sym_tab->heap = heap;
return(sym_tab);
}
/**********************************************************************
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 */
{
sym_node_t* sym;
func_node_t* func;
sym = UT_LIST_GET_FIRST(sym_tab->sym_list);
while (sym) {
eval_node_free_val_buf(sym);
if (sym->prefetch_buf) {
sel_col_prefetch_buf_free(sym->prefetch_buf);
}
if (sym->cursor_def) {
que_graph_free_recursive(sym->cursor_def);
}
sym = UT_LIST_GET_NEXT(sym_list, sym);
}
func = UT_LIST_GET_FIRST(sym_tab->func_node_list);
while (func) {
eval_node_free_val_buf(func);
func = UT_LIST_GET_NEXT(func_node_list, func);
}
}
/**********************************************************************
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 */
{
sym_node_t* node;
byte* data;
node = mem_heap_alloc(sym_tab->heap, sizeof(sym_node_t));
node->common.type = QUE_NODE_SYMBOL;
node->resolved = TRUE;
node->token_type = SYM_LIT;
node->indirection = NULL;
dtype_set(&(node->common.val.type), DATA_INT, 0, 4, 0);
data = mem_heap_alloc(sym_tab->heap, 4);
mach_write_to_4(data, val);
dfield_set_data(&(node->common.val), data, 4);
node->common.val_buf_size = 0;
node->prefetch_buf = NULL;
node->cursor_def = NULL;
UT_LIST_ADD_LAST(sym_list, sym_tab->sym_list, node);
node->sym_table = sym_tab;
return(node);
}
/**********************************************************************
Adds a 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 */
{
sym_node_t* node;
byte* data;
node = mem_heap_alloc(sym_tab->heap, sizeof(sym_node_t));
node->common.type = QUE_NODE_SYMBOL;
node->resolved = TRUE;
node->token_type = SYM_LIT;
node->indirection = NULL;
dtype_set(&(node->common.val.type), DATA_VARCHAR, DATA_ENGLISH, 0, 0);
if (len) {
data = mem_heap_alloc(sym_tab->heap, len);
ut_memcpy(data, str, len);
} else {
data = NULL;
}
dfield_set_data(&(node->common.val), data, len);
node->common.val_buf_size = 0;
node->prefetch_buf = NULL;
node->cursor_def = NULL;
UT_LIST_ADD_LAST(sym_list, sym_tab->sym_list, node);
node->sym_table = sym_tab;
return(node);
}
/**********************************************************************
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 */
{
sym_node_t* node;
node = mem_heap_alloc(sym_tab->heap, sizeof(sym_node_t));
node->common.type = QUE_NODE_SYMBOL;
node->resolved = TRUE;
node->token_type = SYM_LIT;
node->indirection = NULL;
node->common.val.type.mtype = DATA_ERROR;
dfield_set_data(&(node->common.val), NULL, UNIV_SQL_NULL);
node->common.val_buf_size = 0;
node->prefetch_buf = NULL;
node->cursor_def = NULL;
UT_LIST_ADD_LAST(sym_list, sym_tab->sym_list, node);
node->sym_table = sym_tab;
return(node);
}
/**********************************************************************
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 */
{
sym_node_t* node;
node = mem_heap_alloc(sym_tab->heap, sizeof(sym_node_t));
node->common.type = QUE_NODE_SYMBOL;
node->resolved = FALSE;
node->indirection = NULL;
node->name = mem_heap_strdupl(sym_tab->heap, name, len + 1);
node->name_len = len;
UT_LIST_ADD_LAST(sym_list, sym_tab->sym_list, node);
dfield_set_data(&(node->common.val), NULL, UNIV_SQL_NULL);
node->common.val_buf_size = 0;
node->prefetch_buf = NULL;
node->cursor_def = NULL;
node->sym_table = sym_tab;
return(node);
}