|
|
@ -1902,6 +1902,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); |
|
|
|
|
|
|
|
%type <lock_type> |
|
|
|
replace_lock_option opt_low_priority insert_lock_option load_data_lock |
|
|
|
insert_replace_option |
|
|
|
|
|
|
|
%type <item> |
|
|
|
literal insert_ident order_ident temporal_literal |
|
|
@ -2069,7 +2070,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); |
|
|
|
%type <NONE> |
|
|
|
analyze_stmt_command backup backup_statements |
|
|
|
query verb_clause create change select select_into |
|
|
|
do drop insert replace insert2 |
|
|
|
do drop insert replace insert_start stmt_end |
|
|
|
insert_values update delete truncate rename compound_statement |
|
|
|
show describe load alter optimize keycache preload flush |
|
|
|
reset purge begin_stmt_mariadb commit rollback savepoint release |
|
|
@ -5322,7 +5323,7 @@ opt_create_partitioning: |
|
|
|
/* |
|
|
|
This part of the parser is about handling of the partition information. |
|
|
|
|
|
|
|
It's first version was written by Mikael Ronstrm with lots of answers to |
|
|
|
Its first version was written by Mikael Ronström with lots of answers to |
|
|
|
questions provided by Antony Curtis. |
|
|
|
|
|
|
|
The partition grammar can be called from three places. |
|
|
@ -7894,10 +7895,7 @@ alter: |
|
|
|
|
|
|
|
lex->sql_command= SQLCOM_ALTER_PROCEDURE; |
|
|
|
lex->spname= $3; |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
} stmt_end {} |
|
|
|
| ALTER FUNCTION_SYM sp_name |
|
|
|
{ |
|
|
|
LEX *lex= Lex; |
|
|
@ -7914,10 +7912,7 @@ alter: |
|
|
|
|
|
|
|
lex->sql_command= SQLCOM_ALTER_FUNCTION; |
|
|
|
lex->spname= $3; |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
} stmt_end {} |
|
|
|
| ALTER view_algorithm definer_opt opt_view_suid VIEW_SYM table_ident |
|
|
|
{ |
|
|
|
if (Lex->main_select_push()) |
|
|
@ -7925,12 +7920,7 @@ alter: |
|
|
|
if (Lex->add_alter_view(thd, $2, $4, $6)) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
view_list_opt AS view_select |
|
|
|
{ |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
view_list_opt AS view_select stmt_end {} |
|
|
|
| ALTER definer_opt opt_view_suid VIEW_SYM table_ident |
|
|
|
/* |
|
|
|
We have two separate rules for ALTER VIEW rather that |
|
|
@ -7943,12 +7933,7 @@ alter: |
|
|
|
if (Lex->add_alter_view(thd, VIEW_ALGORITHM_INHERIT, $3, $5)) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
view_list_opt AS view_select |
|
|
|
{ |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
view_list_opt AS view_select stmt_end {} |
|
|
|
| ALTER definer_opt remember_name EVENT_SYM sp_name |
|
|
|
{ |
|
|
|
if (Lex->main_select_push()) |
|
|
@ -8049,10 +8034,7 @@ alter: |
|
|
|
Lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_alter_sequence($3); |
|
|
|
if (unlikely(Lex->m_sql_cmd == NULL)) |
|
|
|
MYSQL_YYABORT; |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
} stmt_end {} |
|
|
|
; |
|
|
|
|
|
|
|
opt_account_locking: |
|
|
@ -13489,51 +13471,43 @@ opt_temporary: |
|
|
|
insert: |
|
|
|
INSERT |
|
|
|
{ |
|
|
|
LEX *lex= Lex; |
|
|
|
lex->sql_command= SQLCOM_INSERT; |
|
|
|
lex->duplicates= DUP_ERROR; |
|
|
|
if (Lex->main_select_push()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
mysql_init_select(lex); |
|
|
|
lex->current_select->parsing_place= BEFORE_OPT_LIST; |
|
|
|
} |
|
|
|
insert_lock_option |
|
|
|
opt_ignore insert2 |
|
|
|
{ |
|
|
|
Select->set_lock_for_tables($3, true); |
|
|
|
Lex->current_select= Lex->first_select_lex(); |
|
|
|
Lex->sql_command= SQLCOM_INSERT; |
|
|
|
Lex->duplicates= DUP_ERROR; |
|
|
|
} |
|
|
|
insert_field_spec opt_insert_update |
|
|
|
insert_start insert_lock_option opt_ignore opt_into insert_table |
|
|
|
{ |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
Select->set_lock_for_tables($4, true); |
|
|
|
} |
|
|
|
; |
|
|
|
insert_field_spec opt_insert_update stmt_end {} |
|
|
|
; |
|
|
|
|
|
|
|
replace: |
|
|
|
REPLACE |
|
|
|
{ |
|
|
|
LEX *lex=Lex; |
|
|
|
lex->sql_command = SQLCOM_REPLACE; |
|
|
|
lex->duplicates= DUP_REPLACE; |
|
|
|
if (Lex->main_select_push()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
mysql_init_select(lex); |
|
|
|
lex->current_select->parsing_place= BEFORE_OPT_LIST; |
|
|
|
Lex->sql_command = SQLCOM_REPLACE; |
|
|
|
Lex->duplicates= DUP_REPLACE; |
|
|
|
} |
|
|
|
replace_lock_option insert2 |
|
|
|
insert_start replace_lock_option opt_into insert_table |
|
|
|
{ |
|
|
|
Select->set_lock_for_tables($3, true); |
|
|
|
Lex->current_select= Lex->first_select_lex(); |
|
|
|
Select->set_lock_for_tables($4, true); |
|
|
|
} |
|
|
|
insert_field_spec |
|
|
|
{ |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
; |
|
|
|
insert_field_spec stmt_end {} |
|
|
|
; |
|
|
|
|
|
|
|
insert_start: { |
|
|
|
if (Lex->main_select_push()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
mysql_init_select(Lex); |
|
|
|
Lex->current_select->parsing_place= BEFORE_OPT_LIST; |
|
|
|
} |
|
|
|
; |
|
|
|
|
|
|
|
stmt_end: { |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
; |
|
|
|
|
|
|
|
insert_lock_option: |
|
|
|
/* empty */ |
|
|
@ -13545,19 +13519,17 @@ insert_lock_option: |
|
|
|
*/ |
|
|
|
$$= (Lex->sphead ? TL_WRITE_DEFAULT : TL_WRITE_CONCURRENT_INSERT); |
|
|
|
} |
|
|
|
| LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; } |
|
|
|
| DELAYED_SYM |
|
|
|
{ |
|
|
|
// QQ: why was +1? |
|
|
|
Lex->keyword_delayed_begin_offset= (uint)($1.pos() - thd->query()); |
|
|
|
Lex->keyword_delayed_end_offset= (uint)($1.end() - thd->query()); |
|
|
|
$$= TL_WRITE_DELAYED; |
|
|
|
} |
|
|
|
| insert_replace_option |
|
|
|
| HIGH_PRIORITY { $$= TL_WRITE; } |
|
|
|
; |
|
|
|
|
|
|
|
replace_lock_option: |
|
|
|
opt_low_priority { $$= $1; } |
|
|
|
/* empty */ { $$= TL_WRITE_DEFAULT; } |
|
|
|
| insert_replace_option |
|
|
|
; |
|
|
|
|
|
|
|
insert_replace_option: |
|
|
|
LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; } |
|
|
|
| DELAYED_SYM |
|
|
|
{ |
|
|
|
Lex->keyword_delayed_begin_offset= (uint)($1.pos() - thd->query()); |
|
|
@ -13566,10 +13538,7 @@ replace_lock_option: |
|
|
|
} |
|
|
|
; |
|
|
|
|
|
|
|
insert2: |
|
|
|
INTO insert_table {} |
|
|
|
| insert_table {} |
|
|
|
; |
|
|
|
opt_into: /* nothing */ | INTO ; |
|
|
|
|
|
|
|
insert_table: |
|
|
|
{ |
|
|
@ -13818,10 +13787,7 @@ update: |
|
|
|
{ |
|
|
|
if ($10) |
|
|
|
Select->order_list= *($10); |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
} stmt_end {} |
|
|
|
; |
|
|
|
|
|
|
|
update_list: |
|
|
@ -13941,10 +13907,7 @@ single_multi: |
|
|
|
{ |
|
|
|
if (unlikely(multi_delete_set_locks_and_link_aux_tables(Lex))) |
|
|
|
MYSQL_YYABORT; |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
} stmt_end {} |
|
|
|
| FROM table_alias_ref_list |
|
|
|
{ |
|
|
|
mysql_init_multi_delete(Lex); |
|
|
@ -13955,10 +13918,7 @@ single_multi: |
|
|
|
{ |
|
|
|
if (unlikely(multi_delete_set_locks_and_link_aux_tables(Lex))) |
|
|
|
MYSQL_YYABORT; |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
} stmt_end {} |
|
|
|
; |
|
|
|
|
|
|
|
opt_select_expressions: |
|
|
@ -15023,11 +14983,7 @@ load: |
|
|
|
opt_xml_rows_identified_by |
|
|
|
opt_field_term opt_line_term opt_ignore_lines opt_field_or_var_spec |
|
|
|
opt_load_data_set_spec |
|
|
|
{ |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
stmt_end {} |
|
|
|
; |
|
|
|
|
|
|
|
data_or_xml: |
|
|
@ -16701,11 +16657,7 @@ set: |
|
|
|
lex->set_stmt_init(); |
|
|
|
} |
|
|
|
set_param |
|
|
|
{ |
|
|
|
Lex->pop_select(); //main select |
|
|
|
if (Lex->check_main_unit_semantics()) |
|
|
|
MYSQL_YYABORT; |
|
|
|
} |
|
|
|
stmt_end {} |
|
|
|
; |
|
|
|
|
|
|
|
set_param: |
|
|
|