From aa292666cc3e25e267b5d69e80f30596f84f352d Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Sun, 23 Jul 2017 17:07:56 +0300 Subject: [PATCH] Parser: moved 'for system_time' before alias Due to standard (see 7.6 ). --- mysql-test/suite/versioning/r/cte.result | 8 ++++---- mysql-test/suite/versioning/r/derived.result | 14 +++++++++----- mysql-test/suite/versioning/r/vtmd.result | 8 ++++---- mysql-test/suite/versioning/r/vtmd_show.result | 4 ++-- mysql-test/suite/versioning/t/cte.test | 8 ++++---- mysql-test/suite/versioning/t/derived.test | 12 ++++++++---- mysql-test/suite/versioning/t/vtmd.test | 8 ++++---- mysql-test/suite/versioning/t/vtmd_show.test | 4 ++-- sql/sql_yacc.yy | 6 +++--- 9 files changed, 40 insertions(+), 32 deletions(-) diff --git a/mysql-test/suite/versioning/r/cte.result b/mysql-test/suite/versioning/r/cte.result index 5fe71901b44..161255aeaa7 100644 --- a/mysql-test/suite/versioning/r/cte.result +++ b/mysql-test/suite/versioning/r/cte.result @@ -33,11 +33,11 @@ ancestors as ( select e.emp_id, e.name, e.mgr, e.salary -from emp as e for system_time as of timestamp @ts_1 +from emp for system_time as of timestamp @ts_1 as e where name = 'bill' union select e.emp_id, e.name, e.mgr, e.salary -from emp as e for system_time as of timestamp @ts_1, +from emp for system_time as of timestamp @ts_1 as e, ancestors as a where e.mgr = a.emp_id ) @@ -51,11 +51,11 @@ ancestors as ( select e.emp_id, e.name, e.mgr, e.salary -from emp as e for system_time as of timestamp @ts_2 +from emp for system_time as of timestamp @ts_2 as e where name = 'bill' union select e.emp_id, e.name, e.mgr, e.salary -from emp as e for system_time as of timestamp @ts_2, +from emp for system_time as of timestamp @ts_2 as e, ancestors as a where e.mgr = a.emp_id ) diff --git a/mysql-test/suite/versioning/r/derived.result b/mysql-test/suite/versioning/r/derived.result index 96e8c0afa55..04a237f6428 100644 --- a/mysql-test/suite/versioning/r/derived.result +++ b/mysql-test/suite/versioning/r/derived.result @@ -91,12 +91,14 @@ ancestors as ( select e.emp_id, e.name, e.mgr -from emp as e for system_time as of timestamp @ts +from emp as e where name = 'bill' - union + system_time as of timestamp @ts +union select ee.emp_id, ee.name, ee.mgr -from emp as ee for system_time as of timestamp @ts, ancestors as a for system_time as of timestamp @ts +from emp as ee, ancestors as a where ee.mgr = a.emp_id +system_time as of timestamp @ts ) select * from ancestors; emp_id name mgr @@ -109,12 +111,14 @@ ancestors as ( select e.emp_id, e.name, e.mgr - from emp as e for system_time as of timestamp @ts + from emp as e where name = 'bill' + system_time as of timestamp @ts union select ee.emp_id, ee.name, ee.mgr - from emp as ee for system_time as of timestamp @ts, ancestors as a for system_time as of timestamp @ts + from emp as ee, ancestors as a where ee.mgr = a.emp_id + system_time as of timestamp @ts ) select * from ancestors"; prepare stmt from @tmp; diff --git a/mysql-test/suite/versioning/r/vtmd.result b/mysql-test/suite/versioning/r/vtmd.result index 808f6e7d92d..d2cb726ac6f 100644 --- a/mysql-test/suite/versioning/r/vtmd.result +++ b/mysql-test/suite/versioning/r/vtmd.result @@ -8,8 +8,8 @@ declare continue handler for not found set cur_done = true; set @tmp= concat(' create or replace temporary table cur_tmp as - select vtmd.archive_name from ', vtmd_name, ' as vtmd - for system_time all + select vtmd.archive_name from ', vtmd_name, ' + for system_time all as vtmd where vtmd.archive_name is not null group by vtmd.archive_name'); prepare stmt from @tmp; execute stmt; drop prepare stmt; @@ -29,8 +29,8 @@ begin set @tmp= concat(' create or replace temporary table tmp_vtmd with system versioning as - select * from ', vtmd_name, ' as vtmd - for system_time all'); + select * from ', vtmd_name, ' + for system_time all as vtmd'); prepare stmt from @tmp; execute stmt; drop prepare stmt; set @inf= 0xFFFFFFFFFFFFFFFF + 0; set @start= null; diff --git a/mysql-test/suite/versioning/r/vtmd_show.result b/mysql-test/suite/versioning/r/vtmd_show.result index bcece5cba1f..5bc735f0a72 100644 --- a/mysql-test/suite/versioning/r/vtmd_show.result +++ b/mysql-test/suite/versioning/r/vtmd_show.result @@ -8,8 +8,8 @@ declare continue handler for not found set cur_done = true; set @tmp= concat(' create or replace temporary table cur_tmp as - select vtmd.archive_name from ', vtmd_name, ' as vtmd - for system_time all + select vtmd.archive_name from ', vtmd_name, ' + for system_time all as vtmd where vtmd.archive_name is not null group by vtmd.archive_name'); prepare stmt from @tmp; execute stmt; drop prepare stmt; diff --git a/mysql-test/suite/versioning/t/cte.test b/mysql-test/suite/versioning/t/cte.test index 22c72bd9ed1..7a35352f7c8 100644 --- a/mysql-test/suite/versioning/t/cte.test +++ b/mysql-test/suite/versioning/t/cte.test @@ -39,11 +39,11 @@ ancestors as ( select e.emp_id, e.name, e.mgr, e.salary - from emp as e for system_time as of timestamp @ts_1 + from emp for system_time as of timestamp @ts_1 as e where name = 'bill' union select e.emp_id, e.name, e.mgr, e.salary - from emp as e for system_time as of timestamp @ts_1, + from emp for system_time as of timestamp @ts_1 as e, ancestors as a where e.mgr = a.emp_id ) @@ -55,11 +55,11 @@ ancestors as ( select e.emp_id, e.name, e.mgr, e.salary - from emp as e for system_time as of timestamp @ts_2 + from emp for system_time as of timestamp @ts_2 as e where name = 'bill' union select e.emp_id, e.name, e.mgr, e.salary - from emp as e for system_time as of timestamp @ts_2, + from emp for system_time as of timestamp @ts_2 as e, ancestors as a where e.mgr = a.emp_id ) diff --git a/mysql-test/suite/versioning/t/derived.test b/mysql-test/suite/versioning/t/derived.test index d8b37298210..63683e251c9 100644 --- a/mysql-test/suite/versioning/t/derived.test +++ b/mysql-test/suite/versioning/t/derived.test @@ -62,12 +62,14 @@ ancestors as ( select e.emp_id, e.name, e.mgr - from emp as e for system_time as of timestamp @ts + from emp as e where name = 'bill' + system_time as of timestamp @ts union select ee.emp_id, ee.name, ee.mgr - from emp as ee for system_time as of timestamp @ts, ancestors as a for system_time as of timestamp @ts + from emp as ee, ancestors as a where ee.mgr = a.emp_id + system_time as of timestamp @ts ) select * from ancestors; set @tmp= " @@ -76,12 +78,14 @@ ancestors as ( select e.emp_id, e.name, e.mgr - from emp as e for system_time as of timestamp @ts + from emp as e where name = 'bill' + system_time as of timestamp @ts union select ee.emp_id, ee.name, ee.mgr - from emp as ee for system_time as of timestamp @ts, ancestors as a for system_time as of timestamp @ts + from emp as ee, ancestors as a where ee.mgr = a.emp_id + system_time as of timestamp @ts ) select * from ancestors"; prepare stmt from @tmp; execute stmt; drop prepare stmt; diff --git a/mysql-test/suite/versioning/t/vtmd.test b/mysql-test/suite/versioning/t/vtmd.test index 01b68275737..b81674f675e 100644 --- a/mysql-test/suite/versioning/t/vtmd.test +++ b/mysql-test/suite/versioning/t/vtmd.test @@ -11,8 +11,8 @@ begin set @tmp= concat(' create or replace temporary table cur_tmp as - select vtmd.archive_name from ', vtmd_name, ' as vtmd - for system_time all + select vtmd.archive_name from ', vtmd_name, ' + for system_time all as vtmd where vtmd.archive_name is not null group by vtmd.archive_name'); prepare stmt from @tmp; execute stmt; drop prepare stmt; @@ -37,8 +37,8 @@ begin set @tmp= concat(' create or replace temporary table tmp_vtmd with system versioning as - select * from ', vtmd_name, ' as vtmd - for system_time all'); + select * from ', vtmd_name, ' + for system_time all as vtmd'); prepare stmt from @tmp; execute stmt; drop prepare stmt; set @inf= 0xFFFFFFFFFFFFFFFF + 0; diff --git a/mysql-test/suite/versioning/t/vtmd_show.test b/mysql-test/suite/versioning/t/vtmd_show.test index a4d946bbd55..036c233bd9e 100644 --- a/mysql-test/suite/versioning/t/vtmd_show.test +++ b/mysql-test/suite/versioning/t/vtmd_show.test @@ -10,8 +10,8 @@ begin set @tmp= concat(' create or replace temporary table cur_tmp as - select vtmd.archive_name from ', vtmd_name, ' as vtmd - for system_time all + select vtmd.archive_name from ', vtmd_name, ' + for system_time all as vtmd where vtmd.archive_name is not null group by vtmd.archive_name'); prepare stmt from @tmp; execute stmt; drop prepare stmt; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 27705f6bd41..4cab239795d 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -11334,9 +11334,9 @@ table_primary_ident: SELECT_LEX *sel= Select; sel->table_join_options= 0; } - table_ident opt_use_partition opt_table_alias opt_key_definition opt_for_system_time_clause + table_ident opt_use_partition opt_for_system_time_clause opt_table_alias opt_key_definition { - if (!($$= Select->add_table_to_list(thd, $2, $4, + if (!($$= Select->add_table_to_list(thd, $2, $5, Select->get_table_join_options(), YYPS->m_lock_type, YYPS->m_mdl_type, @@ -11344,7 +11344,7 @@ table_primary_ident: $3))) MYSQL_YYABORT; Select->add_joined_table($$); - if ($6) + if ($4) $$->vers_conditions= Lex->vers_conditions; } ;