mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
new syntax:
CREATE TABLE ...(SELECT ...) UNION ... INSERT ... (SELECT ...) UNION ...
This commit is contained in:
parent
b5c092ba1f
commit
9c89341fd6
1 changed files with 30 additions and 18 deletions
|
@ -803,18 +803,35 @@ create:
|
|||
};
|
||||
|
||||
create2:
|
||||
'(' field_list ')' opt_create_table_options create3 {}
|
||||
'(' create2a {}
|
||||
| opt_create_table_options create3 {};
|
||||
|
||||
create2a:
|
||||
field_list ')' opt_create_table_options create3 {}
|
||||
| create_select ')' { Select->braces= 1;} union_opt {}
|
||||
;
|
||||
|
||||
create3:
|
||||
/* empty */ {}
|
||||
| opt_duplicate opt_as SELECT_SYM
|
||||
| opt_duplicate opt_as create_select
|
||||
{ Select->braces= 0;} opt_union {}
|
||||
| opt_duplicate opt_as '(' create_select ')'
|
||||
{ Select->braces= 1;} union_opt {}
|
||||
;
|
||||
|
||||
create_select:
|
||||
SELECT_SYM
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
|
||||
switch(lex->sql_command) {
|
||||
case SQLCOM_INSERT: lex->sql_command=SQLCOM_INSERT_SELECT; break;
|
||||
case SQLCOM_REPLACE: lex->sql_command=SQLCOM_REPLACE_SELECT; break;
|
||||
}
|
||||
mysql_init_select(lex);
|
||||
}
|
||||
select_options select_item_list opt_select_from opt_union {};
|
||||
select_options select_item_list opt_select_from
|
||||
;
|
||||
|
||||
opt_as:
|
||||
/* empty */ {}
|
||||
|
@ -1490,7 +1507,7 @@ select:
|
|||
select_init:
|
||||
SELECT_SYM select_part2 { Select->braces= 0; } opt_union
|
||||
|
|
||||
'(' SELECT_SYM select_part2 ')' { Select->braces= 1;} union_opt;
|
||||
'(' SELECT_SYM select_part2 ')' { Select->braces= 1;} union_opt;
|
||||
|
||||
|
||||
select_part2:
|
||||
|
@ -2565,7 +2582,7 @@ opt_temporary:
|
|||
|
||||
insert:
|
||||
INSERT { Lex->sql_command = SQLCOM_INSERT; } insert_lock_option
|
||||
opt_ignore insert2
|
||||
opt_ignore insert2
|
||||
{
|
||||
set_lock_for_tables($3);
|
||||
}
|
||||
|
@ -2576,7 +2593,7 @@ insert:
|
|||
replace:
|
||||
REPLACE
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
LEX *lex=Lex;
|
||||
lex->sql_command = SQLCOM_REPLACE;
|
||||
lex->duplicates= DUP_REPLACE;
|
||||
}
|
||||
|
@ -2593,7 +2610,7 @@ insert_lock_option:
|
|||
| LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; }
|
||||
| DELAYED_SYM { $$= TL_WRITE_DELAYED; }
|
||||
| HIGH_PRIORITY { $$= TL_WRITE; }
|
||||
;
|
||||
;
|
||||
|
||||
replace_lock_option:
|
||||
opt_low_priority { $$= $1; }
|
||||
|
@ -2613,7 +2630,9 @@ insert_table:
|
|||
};
|
||||
|
||||
insert_field_spec:
|
||||
opt_field_spec insert_values {}
|
||||
insert_values {}
|
||||
| '(' ')' insert_values {}
|
||||
| '(' fields ')' insert_values {}
|
||||
| SET
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
|
@ -2634,16 +2653,9 @@ fields:
|
|||
|
||||
insert_values:
|
||||
VALUES values_list {}
|
||||
| SELECT_SYM
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
lex->sql_command = (lex->sql_command == SQLCOM_INSERT ?
|
||||
SQLCOM_INSERT_SELECT : SQLCOM_REPLACE_SELECT);
|
||||
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
|
||||
mysql_init_select(lex);
|
||||
}
|
||||
select_options select_item_list select_from select_lock_type
|
||||
opt_union {};
|
||||
| create_select { Select->braces= 0;} opt_union {}
|
||||
| '(' create_select ')' { Select->braces= 1;} union_opt {}
|
||||
;
|
||||
|
||||
values_list:
|
||||
values_list ',' no_braces
|
||||
|
|
Loading…
Reference in a new issue