mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
MDEV-21254 Remove unused keywords from the InnoDB SQL parser
The InnoDB internal SQL parser, which is used for updating the InnoDB data dictionary tables (to be removed in MDEV-11655), persistent statistics (to be refactored in MDEV-15020) and fulltext indexes, implements some unused keywords and built-in functions: OUT BINARY BLOB INTEGER FLOAT SUM DISTINCT READ COMPACT BLOCK_SIZE TO_CHAR TO_NUMBER BINARY_TO_NUMBER REPLSTR SYSDATE PRINTF ASSERT RND RND_STR ROW_PRINTF UNSIGNED Also, procedures are never declared with parameters. Only one top-level procedure is declared and invoked at a time, and parameters are being passed via pars_info_t.
This commit is contained in:
parent
59e14b9684
commit
292015d486
8 changed files with 1486 additions and 2630 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1997, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2017, MariaDB Corporation.
|
||||
Copyright (c) 2017, 2019, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
|
@ -58,11 +58,7 @@ yylex(void);
|
|||
%token PARS_NE_TOKEN
|
||||
%token PARS_PROCEDURE_TOKEN
|
||||
%token PARS_IN_TOKEN
|
||||
%token PARS_OUT_TOKEN
|
||||
%token PARS_BINARY_TOKEN
|
||||
%token PARS_BLOB_TOKEN
|
||||
%token PARS_INT_TOKEN
|
||||
%token PARS_FLOAT_TOKEN
|
||||
%token PARS_CHAR_TOKEN
|
||||
%token PARS_IS_TOKEN
|
||||
%token PARS_BEGIN_TOKEN
|
||||
|
|
@ -75,14 +71,11 @@ yylex(void);
|
|||
%token PARS_WHILE_TOKEN
|
||||
%token PARS_RETURN_TOKEN
|
||||
%token PARS_SELECT_TOKEN
|
||||
%token PARS_SUM_TOKEN
|
||||
%token PARS_COUNT_TOKEN
|
||||
%token PARS_DISTINCT_TOKEN
|
||||
%token PARS_FROM_TOKEN
|
||||
%token PARS_WHERE_TOKEN
|
||||
%token PARS_FOR_TOKEN
|
||||
%token PARS_DDOT_TOKEN
|
||||
%token PARS_READ_TOKEN
|
||||
%token PARS_ORDER_TOKEN
|
||||
%token PARS_BY_TOKEN
|
||||
%token PARS_ASC_TOKEN
|
||||
|
|
@ -109,25 +102,14 @@ yylex(void);
|
|||
%token PARS_FETCH_TOKEN
|
||||
%token PARS_CLOSE_TOKEN
|
||||
%token PARS_NOTFOUND_TOKEN
|
||||
%token PARS_TO_CHAR_TOKEN
|
||||
%token PARS_TO_NUMBER_TOKEN
|
||||
%token PARS_TO_BINARY_TOKEN
|
||||
%token PARS_BINARY_TO_NUMBER_TOKEN
|
||||
%token PARS_SUBSTR_TOKEN
|
||||
%token PARS_REPLSTR_TOKEN
|
||||
%token PARS_CONCAT_TOKEN
|
||||
%token PARS_INSTR_TOKEN
|
||||
%token PARS_LENGTH_TOKEN
|
||||
%token PARS_SYSDATE_TOKEN
|
||||
%token PARS_PRINTF_TOKEN
|
||||
%token PARS_ASSERT_TOKEN
|
||||
%token PARS_RND_TOKEN
|
||||
%token PARS_RND_STR_TOKEN
|
||||
%token PARS_ROW_PRINTF_TOKEN
|
||||
%token PARS_COMMIT_TOKEN
|
||||
%token PARS_ROLLBACK_TOKEN
|
||||
%token PARS_WORK_TOKEN
|
||||
%token PARS_UNSIGNED_TOKEN
|
||||
%token PARS_EXIT_TOKEN
|
||||
%token PARS_FUNCTION_TOKEN
|
||||
%token PARS_LOCK_TOKEN
|
||||
|
|
@ -139,8 +121,6 @@ yylex(void);
|
|||
%token PARS_LIKE_TOKEN_SUFFIX
|
||||
%token PARS_LIKE_TOKEN_SUBSTR
|
||||
%token PARS_TABLE_NAME_TOKEN
|
||||
%token PARS_COMPACT_TOKEN
|
||||
%token PARS_BLOCK_SIZE_TOKEN
|
||||
%token PARS_BIGINT_TOKEN
|
||||
|
||||
%left PARS_AND_TOKEN PARS_OR_TOKEN
|
||||
|
|
@ -161,7 +141,6 @@ top_statement:
|
|||
|
||||
statement:
|
||||
stored_procedure_call
|
||||
| predefined_procedure_call ';'
|
||||
| while_statement ';'
|
||||
| for_statement ';'
|
||||
| exit_statement ';'
|
||||
|
|
@ -170,7 +149,6 @@ statement:
|
|||
| assignment_statement ';'
|
||||
| select_statement ';'
|
||||
| insert_statement ';'
|
||||
| row_printf_statement ';'
|
||||
| delete_statement_searched ';'
|
||||
| delete_statement_positioned ';'
|
||||
| update_statement_searched ';'
|
||||
|
|
@ -223,18 +201,11 @@ exp:
|
|||
;
|
||||
|
||||
function_name:
|
||||
PARS_TO_CHAR_TOKEN { $$ = &pars_to_char_token; }
|
||||
| PARS_TO_NUMBER_TOKEN { $$ = &pars_to_number_token; }
|
||||
| PARS_TO_BINARY_TOKEN { $$ = &pars_to_binary_token; }
|
||||
| PARS_BINARY_TO_NUMBER_TOKEN
|
||||
{ $$ = &pars_binary_to_number_token; }
|
||||
PARS_TO_BINARY_TOKEN { $$ = &pars_to_binary_token; }
|
||||
| PARS_SUBSTR_TOKEN { $$ = &pars_substr_token; }
|
||||
| PARS_CONCAT_TOKEN { $$ = &pars_concat_token; }
|
||||
| PARS_INSTR_TOKEN { $$ = &pars_instr_token; }
|
||||
| PARS_LENGTH_TOKEN { $$ = &pars_length_token; }
|
||||
| PARS_SYSDATE_TOKEN { $$ = &pars_sysdate_token; }
|
||||
| PARS_RND_TOKEN { $$ = &pars_rnd_token; }
|
||||
| PARS_RND_STR_TOKEN { $$ = &pars_rnd_str_token; }
|
||||
;
|
||||
|
||||
question_mark_list:
|
||||
|
|
@ -249,17 +220,6 @@ stored_procedure_call:
|
|||
static_cast<sym_node_t*>($2)); }
|
||||
;
|
||||
|
||||
predefined_procedure_call:
|
||||
predefined_procedure_name '(' exp_list ')'
|
||||
{ $$ = pars_procedure_call($1, $3); }
|
||||
;
|
||||
|
||||
predefined_procedure_name:
|
||||
PARS_REPLSTR_TOKEN { $$ = &pars_replstr_token; }
|
||||
| PARS_PRINTF_TOKEN { $$ = &pars_printf_token; }
|
||||
| PARS_ASSERT_TOKEN { $$ = &pars_assert_token; }
|
||||
;
|
||||
|
||||
user_function_call:
|
||||
PARS_ID_TOKEN '(' ')' { $$ = $1; }
|
||||
;
|
||||
|
|
@ -287,19 +247,9 @@ select_item:
|
|||
exp { $$ = $1; }
|
||||
| PARS_COUNT_TOKEN '(' '*' ')'
|
||||
{ $$ = pars_func(&pars_count_token,
|
||||
que_node_list_add_last(NULL,
|
||||
que_node_list_add_last(NULL,
|
||||
sym_tab_add_int_lit(
|
||||
pars_sym_tab_global, 1))); }
|
||||
| PARS_COUNT_TOKEN '(' PARS_DISTINCT_TOKEN PARS_ID_TOKEN ')'
|
||||
{ $$ = pars_func(&pars_count_token,
|
||||
que_node_list_add_last(NULL,
|
||||
pars_func(&pars_distinct_token,
|
||||
que_node_list_add_last(
|
||||
NULL, $4)))); }
|
||||
| PARS_SUM_TOKEN '(' exp ')'
|
||||
{ $$ = pars_func(&pars_sum_token,
|
||||
que_node_list_add_last(NULL,
|
||||
$3)); }
|
||||
;
|
||||
|
||||
select_item_list:
|
||||
|
|
@ -446,12 +396,6 @@ delete_statement_positioned:
|
|||
NULL); }
|
||||
;
|
||||
|
||||
row_printf_statement:
|
||||
PARS_ROW_PRINTF_TOKEN select_statement
|
||||
{ $$ = pars_row_printf_statement(
|
||||
static_cast<sel_node_t*>($2)); }
|
||||
;
|
||||
|
||||
assignment_statement:
|
||||
PARS_ID_TOKEN PARS_ASSIGN_TOKEN exp
|
||||
{ $$ = pars_assignment_statement(
|
||||
|
|
@ -536,12 +480,12 @@ fetch_statement:
|
|||
;
|
||||
|
||||
column_def:
|
||||
PARS_ID_TOKEN type_name opt_column_len opt_unsigned opt_not_null
|
||||
PARS_ID_TOKEN type_name opt_column_len opt_not_null
|
||||
{ $$ = pars_column_def(
|
||||
static_cast<sym_node_t*>($1),
|
||||
static_cast<pars_res_word_t*>($2),
|
||||
static_cast<sym_node_t*>($3),
|
||||
$4, $5); }
|
||||
$4); }
|
||||
;
|
||||
|
||||
column_def_list:
|
||||
|
|
@ -556,13 +500,6 @@ opt_column_len:
|
|||
{ $$ = $2; }
|
||||
;
|
||||
|
||||
opt_unsigned:
|
||||
/* Nothing */ { $$ = NULL; }
|
||||
| PARS_UNSIGNED_TOKEN
|
||||
{ $$ = &pars_int_token;
|
||||
/* pass any non-NULL pointer */ }
|
||||
;
|
||||
|
||||
opt_not_null:
|
||||
/* Nothing */ { $$ = NULL; }
|
||||
| PARS_NOT_TOKEN PARS_NULL_LIT
|
||||
|
|
@ -570,27 +507,12 @@ opt_not_null:
|
|||
/* pass any non-NULL pointer */ }
|
||||
;
|
||||
|
||||
compact:
|
||||
/* Nothing */ { $$ = NULL; }
|
||||
| PARS_COMPACT_TOKEN { $$ = &pars_int_token;
|
||||
/* pass any non-NULL pointer */ }
|
||||
;
|
||||
|
||||
block_size:
|
||||
/* Nothing */ { $$ = NULL; }
|
||||
| PARS_BLOCK_SIZE_TOKEN '=' PARS_INT_LIT
|
||||
{ $$ = $3; }
|
||||
;
|
||||
|
||||
create_table:
|
||||
PARS_CREATE_TOKEN PARS_TABLE_TOKEN
|
||||
table_name '(' column_def_list ')'
|
||||
compact block_size
|
||||
{ $$ = pars_create_table(
|
||||
static_cast<sym_node_t*>($3),
|
||||
static_cast<sym_node_t*>($5),
|
||||
static_cast<sym_node_t*>($7),
|
||||
static_cast<sym_node_t*>($8)); }
|
||||
static_cast<sym_node_t*>($5)); }
|
||||
;
|
||||
|
||||
column_list:
|
||||
|
|
@ -642,28 +564,6 @@ type_name:
|
|||
PARS_INT_TOKEN { $$ = &pars_int_token; }
|
||||
| PARS_BIGINT_TOKEN { $$ = &pars_bigint_token; }
|
||||
| PARS_CHAR_TOKEN { $$ = &pars_char_token; }
|
||||
| PARS_BINARY_TOKEN { $$ = &pars_binary_token; }
|
||||
| PARS_BLOB_TOKEN { $$ = &pars_blob_token; }
|
||||
;
|
||||
|
||||
parameter_declaration:
|
||||
PARS_ID_TOKEN PARS_IN_TOKEN type_name
|
||||
{ $$ = pars_parameter_declaration(
|
||||
static_cast<sym_node_t*>($1),
|
||||
PARS_INPUT,
|
||||
static_cast<pars_res_word_t*>($3)); }
|
||||
| PARS_ID_TOKEN PARS_OUT_TOKEN type_name
|
||||
{ $$ = pars_parameter_declaration(
|
||||
static_cast<sym_node_t*>($1),
|
||||
PARS_OUTPUT,
|
||||
static_cast<pars_res_word_t*>($3)); }
|
||||
;
|
||||
|
||||
parameter_declaration_list:
|
||||
/* Nothing */ { $$ = NULL; }
|
||||
| parameter_declaration { $$ = que_node_list_add_last(NULL, $1); }
|
||||
| parameter_declaration_list ',' parameter_declaration
|
||||
{ $$ = que_node_list_add_last($1, $3); }
|
||||
;
|
||||
|
||||
variable_declaration:
|
||||
|
|
@ -705,16 +605,14 @@ declaration_list:
|
|||
;
|
||||
|
||||
procedure_definition:
|
||||
PARS_PROCEDURE_TOKEN PARS_ID_TOKEN '(' parameter_declaration_list ')'
|
||||
PARS_PROCEDURE_TOKEN PARS_ID_TOKEN '(' ')'
|
||||
PARS_IS_TOKEN
|
||||
variable_declaration_list
|
||||
declaration_list
|
||||
PARS_BEGIN_TOKEN
|
||||
statement_list
|
||||
PARS_END_TOKEN { $$ = pars_procedure_definition(
|
||||
static_cast<sym_node_t*>($2),
|
||||
static_cast<sym_node_t*>($4),
|
||||
$10); }
|
||||
static_cast<sym_node_t*>($2), $9); }
|
||||
;
|
||||
|
||||
%%
|
||||
|
|
|
|||
|
|
@ -249,30 +249,10 @@ In the state 'id', only two actions are possible (defined below). */
|
|||
return(PARS_IN_TOKEN);
|
||||
}
|
||||
|
||||
"OUT" {
|
||||
return(PARS_OUT_TOKEN);
|
||||
}
|
||||
|
||||
"BINARY" {
|
||||
return(PARS_BINARY_TOKEN);
|
||||
}
|
||||
|
||||
"BLOB" {
|
||||
return(PARS_BLOB_TOKEN);
|
||||
}
|
||||
|
||||
"INT" {
|
||||
return(PARS_INT_TOKEN);
|
||||
}
|
||||
|
||||
"INTEGER" {
|
||||
return(PARS_INT_TOKEN);
|
||||
}
|
||||
|
||||
"FLOAT" {
|
||||
return(PARS_FLOAT_TOKEN);
|
||||
}
|
||||
|
||||
"CHAR" {
|
||||
return(PARS_CHAR_TOKEN);
|
||||
}
|
||||
|
|
@ -321,18 +301,10 @@ In the state 'id', only two actions are possible (defined below). */
|
|||
return(PARS_SELECT_TOKEN);
|
||||
}
|
||||
|
||||
"SUM" {
|
||||
return(PARS_SUM_TOKEN);
|
||||
}
|
||||
|
||||
"COUNT" {
|
||||
return(PARS_COUNT_TOKEN);
|
||||
}
|
||||
|
||||
"DISTINCT" {
|
||||
return(PARS_DISTINCT_TOKEN);
|
||||
}
|
||||
|
||||
"FROM" {
|
||||
return(PARS_FROM_TOKEN);
|
||||
}
|
||||
|
|
@ -345,10 +317,6 @@ In the state 'id', only two actions are possible (defined below). */
|
|||
return(PARS_FOR_TOKEN);
|
||||
}
|
||||
|
||||
"READ" {
|
||||
return(PARS_READ_TOKEN);
|
||||
}
|
||||
|
||||
"ORDER" {
|
||||
return(PARS_ORDER_TOKEN);
|
||||
}
|
||||
|
|
@ -405,14 +373,6 @@ In the state 'id', only two actions are possible (defined below). */
|
|||
return(PARS_TABLE_TOKEN);
|
||||
}
|
||||
|
||||
"COMPACT" {
|
||||
return(PARS_COMPACT_TOKEN);
|
||||
}
|
||||
|
||||
"BLOCK_SIZE" {
|
||||
return(PARS_BLOCK_SIZE_TOKEN);
|
||||
}
|
||||
|
||||
"INDEX" {
|
||||
return(PARS_INDEX_TOKEN);
|
||||
}
|
||||
|
|
@ -453,30 +413,14 @@ In the state 'id', only two actions are possible (defined below). */
|
|||
return(PARS_NOTFOUND_TOKEN);
|
||||
}
|
||||
|
||||
"TO_CHAR" {
|
||||
return(PARS_TO_CHAR_TOKEN);
|
||||
}
|
||||
|
||||
"TO_NUMBER" {
|
||||
return(PARS_TO_NUMBER_TOKEN);
|
||||
}
|
||||
|
||||
"TO_BINARY" {
|
||||
return(PARS_TO_BINARY_TOKEN);
|
||||
}
|
||||
|
||||
"BINARY_TO_NUMBER" {
|
||||
return(PARS_BINARY_TO_NUMBER_TOKEN);
|
||||
}
|
||||
|
||||
"SUBSTR" {
|
||||
return(PARS_SUBSTR_TOKEN);
|
||||
}
|
||||
|
||||
"REPLSTR" {
|
||||
return(PARS_REPLSTR_TOKEN);
|
||||
}
|
||||
|
||||
"CONCAT" {
|
||||
return(PARS_CONCAT_TOKEN);
|
||||
}
|
||||
|
|
@ -489,30 +433,6 @@ In the state 'id', only two actions are possible (defined below). */
|
|||
return(PARS_LENGTH_TOKEN);
|
||||
}
|
||||
|
||||
"SYSDATE" {
|
||||
return(PARS_SYSDATE_TOKEN);
|
||||
}
|
||||
|
||||
"PRINTF" {
|
||||
return(PARS_PRINTF_TOKEN);
|
||||
}
|
||||
|
||||
"ASSERT" {
|
||||
return(PARS_ASSERT_TOKEN);
|
||||
}
|
||||
|
||||
"RND" {
|
||||
return(PARS_RND_TOKEN);
|
||||
}
|
||||
|
||||
"RND_STR" {
|
||||
return(PARS_RND_STR_TOKEN);
|
||||
}
|
||||
|
||||
"ROW_PRINTF" {
|
||||
return(PARS_ROW_PRINTF_TOKEN);
|
||||
}
|
||||
|
||||
"COMMIT" {
|
||||
return(PARS_COMMIT_TOKEN);
|
||||
}
|
||||
|
|
@ -525,10 +445,6 @@ In the state 'id', only two actions are possible (defined below). */
|
|||
return(PARS_WORK_TOKEN);
|
||||
}
|
||||
|
||||
"UNSIGNED" {
|
||||
return(PARS_UNSIGNED_TOKEN);
|
||||
}
|
||||
|
||||
"EXIT" {
|
||||
return(PARS_EXIT_TOKEN);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,29 +50,15 @@ sym_tab_t* pars_sym_tab_global;
|
|||
/* Global variables used to denote certain reserved words, used in
|
||||
constructing the parsing tree */
|
||||
|
||||
pars_res_word_t pars_to_char_token = {PARS_TO_CHAR_TOKEN};
|
||||
pars_res_word_t pars_to_number_token = {PARS_TO_NUMBER_TOKEN};
|
||||
pars_res_word_t pars_to_binary_token = {PARS_TO_BINARY_TOKEN};
|
||||
pars_res_word_t pars_binary_to_number_token = {PARS_BINARY_TO_NUMBER_TOKEN};
|
||||
pars_res_word_t pars_substr_token = {PARS_SUBSTR_TOKEN};
|
||||
pars_res_word_t pars_replstr_token = {PARS_REPLSTR_TOKEN};
|
||||
pars_res_word_t pars_concat_token = {PARS_CONCAT_TOKEN};
|
||||
pars_res_word_t pars_instr_token = {PARS_INSTR_TOKEN};
|
||||
pars_res_word_t pars_length_token = {PARS_LENGTH_TOKEN};
|
||||
pars_res_word_t pars_sysdate_token = {PARS_SYSDATE_TOKEN};
|
||||
pars_res_word_t pars_printf_token = {PARS_PRINTF_TOKEN};
|
||||
pars_res_word_t pars_assert_token = {PARS_ASSERT_TOKEN};
|
||||
pars_res_word_t pars_rnd_token = {PARS_RND_TOKEN};
|
||||
pars_res_word_t pars_rnd_str_token = {PARS_RND_STR_TOKEN};
|
||||
pars_res_word_t pars_count_token = {PARS_COUNT_TOKEN};
|
||||
pars_res_word_t pars_sum_token = {PARS_SUM_TOKEN};
|
||||
pars_res_word_t pars_distinct_token = {PARS_DISTINCT_TOKEN};
|
||||
pars_res_word_t pars_binary_token = {PARS_BINARY_TOKEN};
|
||||
pars_res_word_t pars_blob_token = {PARS_BLOB_TOKEN};
|
||||
pars_res_word_t pars_int_token = {PARS_INT_TOKEN};
|
||||
pars_res_word_t pars_bigint_token = {PARS_BIGINT_TOKEN};
|
||||
pars_res_word_t pars_char_token = {PARS_CHAR_TOKEN};
|
||||
pars_res_word_t pars_float_token = {PARS_FLOAT_TOKEN};
|
||||
pars_res_word_t pars_update_token = {PARS_UPDATE_TOKEN};
|
||||
pars_res_word_t pars_asc_token = {PARS_ASC_TOKEN};
|
||||
pars_res_word_t pars_desc_token = {PARS_DESC_TOKEN};
|
||||
|
|
@ -195,24 +181,15 @@ pars_func_get_class(
|
|||
case PARS_AND_TOKEN: case PARS_OR_TOKEN: case PARS_NOT_TOKEN:
|
||||
return(PARS_FUNC_LOGICAL);
|
||||
|
||||
case PARS_COUNT_TOKEN: case PARS_SUM_TOKEN:
|
||||
case PARS_COUNT_TOKEN:
|
||||
return(PARS_FUNC_AGGREGATE);
|
||||
|
||||
case PARS_TO_CHAR_TOKEN:
|
||||
case PARS_TO_NUMBER_TOKEN:
|
||||
case PARS_TO_BINARY_TOKEN:
|
||||
case PARS_BINARY_TO_NUMBER_TOKEN:
|
||||
case PARS_SUBSTR_TOKEN:
|
||||
case PARS_CONCAT_TOKEN:
|
||||
case PARS_LENGTH_TOKEN:
|
||||
case PARS_INSTR_TOKEN:
|
||||
case PARS_SYSDATE_TOKEN:
|
||||
case PARS_NOTFOUND_TOKEN:
|
||||
case PARS_PRINTF_TOKEN:
|
||||
case PARS_ASSERT_TOKEN:
|
||||
case PARS_RND_TOKEN:
|
||||
case PARS_RND_STR_TOKEN:
|
||||
case PARS_REPLSTR_TOKEN:
|
||||
return(PARS_FUNC_PREDEFINED);
|
||||
|
||||
default:
|
||||
|
|
@ -499,7 +476,6 @@ pars_resolve_func_data_type(
|
|||
arg = node->args;
|
||||
|
||||
switch (node->func) {
|
||||
case PARS_SUM_TOKEN:
|
||||
case '+': case '-': case '*': case '/':
|
||||
/* Inherit the data type from the first argument (which must
|
||||
not be the SQL null literal whose type is DATA_ERROR) */
|
||||
|
|
@ -516,13 +492,6 @@ pars_resolve_func_data_type(
|
|||
dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
|
||||
break;
|
||||
|
||||
case PARS_TO_CHAR_TOKEN:
|
||||
case PARS_RND_STR_TOKEN:
|
||||
ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT);
|
||||
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
|
||||
DATA_ENGLISH, 0);
|
||||
break;
|
||||
|
||||
case PARS_TO_BINARY_TOKEN:
|
||||
if (dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT) {
|
||||
dtype_set(que_node_get_data_type(node), DATA_VARCHAR,
|
||||
|
|
@ -533,19 +502,12 @@ pars_resolve_func_data_type(
|
|||
}
|
||||
break;
|
||||
|
||||
case PARS_TO_NUMBER_TOKEN:
|
||||
case PARS_BINARY_TO_NUMBER_TOKEN:
|
||||
case PARS_LENGTH_TOKEN:
|
||||
case PARS_INSTR_TOKEN:
|
||||
ut_a(pars_is_string_type(que_node_get_data_type(arg)->mtype));
|
||||
dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
|
||||
break;
|
||||
|
||||
case PARS_SYSDATE_TOKEN:
|
||||
ut_a(arg == NULL);
|
||||
dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
|
||||
break;
|
||||
|
||||
case PARS_SUBSTR_TOKEN:
|
||||
case PARS_CONCAT_TOKEN:
|
||||
ut_a(pars_is_string_type(que_node_get_data_type(arg)->mtype));
|
||||
|
|
@ -566,11 +528,6 @@ pars_resolve_func_data_type(
|
|||
dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
|
||||
break;
|
||||
|
||||
case PARS_RND_TOKEN:
|
||||
ut_a(dtype_get_mtype(que_node_get_data_type(arg)) == DATA_INT);
|
||||
dtype_set(que_node_get_data_type(node), DATA_INT, 0, 4);
|
||||
break;
|
||||
|
||||
case PARS_LIKE_TOKEN_EXACT:
|
||||
case PARS_LIKE_TOKEN_PREFIX:
|
||||
case PARS_LIKE_TOKEN_SUFFIX:
|
||||
|
|
@ -1355,9 +1312,7 @@ pars_set_dfield_type(
|
|||
pars_res_word_t* type, /*!< in: pointer to a type
|
||||
token */
|
||||
ulint len, /*!< in: length, or 0 */
|
||||
ibool is_unsigned, /*!< in: if TRUE, column is
|
||||
UNSIGNED. */
|
||||
ibool is_not_null) /*!< in: if TRUE, column is
|
||||
bool is_not_null) /*!< in: whether the column is
|
||||
NOT NULL. */
|
||||
{
|
||||
ulint flags = 0;
|
||||
|
|
@ -1366,10 +1321,6 @@ pars_set_dfield_type(
|
|||
flags |= DATA_NOT_NULL;
|
||||
}
|
||||
|
||||
if (is_unsigned) {
|
||||
flags |= DATA_UNSIGNED;
|
||||
}
|
||||
|
||||
if (type == &pars_bigint_token) {
|
||||
ut_a(len == 0);
|
||||
|
||||
|
|
@ -1384,16 +1335,6 @@ pars_set_dfield_type(
|
|||
|
||||
dtype_set(dfield_get_type(dfield), DATA_VARCHAR,
|
||||
DATA_ENGLISH | flags, len);
|
||||
} else if (type == &pars_binary_token) {
|
||||
ut_a(len != 0);
|
||||
|
||||
dtype_set(dfield_get_type(dfield), DATA_FIXBINARY,
|
||||
DATA_BINARY_TYPE | flags, len);
|
||||
} else if (type == &pars_blob_token) {
|
||||
ut_a(len == 0);
|
||||
|
||||
dtype_set(dfield_get_type(dfield), DATA_BLOB,
|
||||
DATA_BINARY_TYPE | flags, 0);
|
||||
} else {
|
||||
ut_error;
|
||||
}
|
||||
|
|
@ -1414,28 +1355,7 @@ pars_variable_declaration(
|
|||
|
||||
node->param_type = PARS_NOT_PARAM;
|
||||
|
||||
pars_set_dfield_type(que_node_get_val(node), type, 0, FALSE, FALSE);
|
||||
|
||||
return(node);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Parses a procedure parameter declaration.
|
||||
@return own: symbol table node of type SYM_VAR */
|
||||
sym_node_t*
|
||||
pars_parameter_declaration(
|
||||
/*=======================*/
|
||||
sym_node_t* node, /*!< in: symbol table node allocated for the
|
||||
id of the parameter */
|
||||
ulint param_type,
|
||||
/*!< in: PARS_INPUT or PARS_OUTPUT */
|
||||
pars_res_word_t* type) /*!< in: pointer to a type token */
|
||||
{
|
||||
ut_a((param_type == PARS_INPUT) || (param_type == PARS_OUTPUT));
|
||||
|
||||
pars_variable_declaration(node, type);
|
||||
|
||||
node->param_type = param_type;
|
||||
pars_set_dfield_type(que_node_get_val(node), type, 0, false);
|
||||
|
||||
return(node);
|
||||
}
|
||||
|
|
@ -1821,8 +1741,6 @@ pars_column_def(
|
|||
pars_res_word_t* type, /*!< in: data type */
|
||||
sym_node_t* len, /*!< in: length of column, or
|
||||
NULL */
|
||||
void* is_unsigned, /*!< in: if not NULL, column
|
||||
is of type UNSIGNED. */
|
||||
void* is_not_null) /*!< in: if not NULL, column
|
||||
is of type NOT NULL. */
|
||||
{
|
||||
|
|
@ -1835,7 +1753,7 @@ pars_column_def(
|
|||
}
|
||||
|
||||
pars_set_dfield_type(que_node_get_val(sym_node), type, len2,
|
||||
is_unsigned != NULL, is_not_null != NULL);
|
||||
is_not_null != NULL);
|
||||
|
||||
return(sym_node);
|
||||
}
|
||||
|
|
@ -1848,9 +1766,7 @@ pars_create_table(
|
|||
/*==============*/
|
||||
sym_node_t* table_sym, /*!< in: table name node in the symbol
|
||||
table */
|
||||
sym_node_t* column_defs, /*!< in: list of column names */
|
||||
sym_node_t* compact, /* in: non-NULL if COMPACT table. */
|
||||
sym_node_t* block_size) /* in: block size (can be NULL) */
|
||||
sym_node_t* column_defs) /*!< in: list of column names */
|
||||
{
|
||||
dict_table_t* table;
|
||||
sym_node_t* column;
|
||||
|
|
@ -1858,57 +1774,11 @@ pars_create_table(
|
|||
const dtype_t* dtype;
|
||||
ulint n_cols;
|
||||
ulint flags = 0;
|
||||
ulint flags2 = 0;
|
||||
ulint flags2 = DICT_TF2_FTS_AUX_HEX_NAME;
|
||||
|
||||
if (compact != NULL) {
|
||||
|
||||
/* System tables currently only use the REDUNDANT row
|
||||
format therefore the check for srv_file_per_table should be
|
||||
safe for now. */
|
||||
|
||||
flags |= DICT_TF_COMPACT;
|
||||
|
||||
/* FIXME: Ideally this should be part of the SQL syntax
|
||||
or use some other mechanism. We want to reduce dependency
|
||||
on global variables. There is an inherent race here but
|
||||
that has always existed around this variable. */
|
||||
if (srv_file_per_table) {
|
||||
flags2 |= DICT_TF2_USE_FILE_PER_TABLE;
|
||||
}
|
||||
}
|
||||
|
||||
if (block_size != NULL) {
|
||||
ulint size;
|
||||
dfield_t* dfield;
|
||||
|
||||
dfield = que_node_get_val(block_size);
|
||||
|
||||
ut_a(dfield_get_len(dfield) == 4);
|
||||
size = mach_read_from_4(static_cast<byte*>(
|
||||
dfield_get_data(dfield)));
|
||||
|
||||
|
||||
switch (size) {
|
||||
case 0:
|
||||
break;
|
||||
|
||||
case 1: case 2: case 4: case 8: case 16:
|
||||
flags |= DICT_TF_COMPACT;
|
||||
/* FTS-FIXME: needs the zip changes */
|
||||
/* flags |= size << DICT_TF_COMPRESSED_SHIFT; */
|
||||
break;
|
||||
|
||||
default:
|
||||
ut_error;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the flags2 when create table or alter tables */
|
||||
flags2 |= DICT_TF2_FTS_AUX_HEX_NAME;
|
||||
DBUG_EXECUTE_IF("innodb_test_wrong_fts_aux_table_name",
|
||||
flags2 &= ~DICT_TF2_FTS_AUX_HEX_NAME;);
|
||||
|
||||
|
||||
n_cols = que_node_list_get_len(column_defs);
|
||||
|
||||
table = dict_mem_table_create(
|
||||
|
|
@ -2001,7 +1871,6 @@ pars_procedure_definition(
|
|||
/*======================*/
|
||||
sym_node_t* sym_node, /*!< in: procedure id node in the symbol
|
||||
table */
|
||||
sym_node_t* param_list, /*!< in: parameter declaration list */
|
||||
que_node_t* stat_list) /*!< in: statement list */
|
||||
{
|
||||
proc_node_t* node;
|
||||
|
|
@ -2026,7 +1895,6 @@ pars_procedure_definition(
|
|||
sym_node->resolved = TRUE;
|
||||
|
||||
node->proc_id = sym_node;
|
||||
node->param_list = param_list;
|
||||
node->stat_list = stat_list;
|
||||
|
||||
pars_set_parent_in_list(stat_list, node);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue