System Versioning 1.0 pre6

Merge remote-tracking branch 'mariadb/bb-10.3-temporal-serg' into trunk
This commit is contained in:
Aleksey Midenkov 2017-12-15 18:12:18 +03:00
commit 4624e565f3
47 changed files with 528 additions and 541 deletions

View File

@ -4897,6 +4897,76 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SYSTEM_VERSIONING_ALTER_HISTORY
SESSION_VALUE ERROR
GLOBAL_VALUE ERROR
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE ERROR
VARIABLE_SCOPE SESSION
VARIABLE_TYPE ENUM
VARIABLE_COMMENT Versioning ALTER TABLE mode. ERROR: Fail ALTER with error; KEEP: Keep historical system rows and subject them to ALTER;
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST ERROR,KEEP
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SYSTEM_VERSIONING_ASOF
SESSION_VALUE DEFAULT
GLOBAL_VALUE DEFAULT
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE DEFAULT
VARIABLE_SCOPE SESSION
VARIABLE_TYPE VARCHAR
VARIABLE_COMMENT Default value for the FOR SYSTEM_TIME AS OF clause
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST DEFAULT
READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME SYSTEM_VERSIONING_FORCE
SESSION_VALUE OFF
GLOBAL_VALUE OFF
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE OFF
VARIABLE_SCOPE SESSION
VARIABLE_TYPE BOOLEAN
VARIABLE_COMMENT Force system versioning for all created tables
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST OFF,ON
READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME SYSTEM_VERSIONING_HIDE
SESSION_VALUE AUTO
GLOBAL_VALUE AUTO
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE AUTO
VARIABLE_SCOPE SESSION
VARIABLE_TYPE ENUM
VARIABLE_COMMENT Hide system versioning from being displayed in table info. AUTO: hide implicit system fields only in non-versioned and AS OF queries; IMPLICIT: hide implicit system fields in all queries; FULL: hide any system fields in all queries and hide versioning info in SHOW commands; NEVER: don't hide system fields
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST AUTO,IMPLICIT,FULL,NEVER
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SYSTEM_VERSIONING_INNODB_ALGORITHM_SIMPLE
SESSION_VALUE ON
GLOBAL_VALUE ON
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE ON
VARIABLE_SCOPE SESSION
VARIABLE_TYPE BOOLEAN
VARIABLE_COMMENT Use simple algorithm of timestamp handling in InnoDB instead of TRX_SEES
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST OFF,ON
READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME TABLE_DEFINITION_CACHE VARIABLE_NAME TABLE_DEFINITION_CACHE
SESSION_VALUE NULL SESSION_VALUE NULL
GLOBAL_VALUE 400 GLOBAL_VALUE 400
@ -5373,76 +5443,6 @@ NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST NEVER,COMPLEMENTARY,PREFERABLY ENUM_VALUE_LIST NEVER,COMPLEMENTARY,PREFERABLY
READ_ONLY NO READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME VERSIONING_ALTER_HISTORY
SESSION_VALUE ERROR
GLOBAL_VALUE ERROR
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE ERROR
VARIABLE_SCOPE SESSION
VARIABLE_TYPE ENUM
VARIABLE_COMMENT Versioning ALTER TABLE mode. ERROR: Fail ALTER with error; KEEP: Keep historical system rows and subject them to ALTER;
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST ERROR,KEEP
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME VERSIONING_ASOF_TIMESTAMP
SESSION_VALUE CURRENT
GLOBAL_VALUE CURRENT
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE CURRENT
VARIABLE_SCOPE SESSION
VARIABLE_TYPE VARCHAR
VARIABLE_COMMENT Default AS OF value for versioned queries
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST CURRENT,ALL
READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME VERSIONING_FORCE
SESSION_VALUE OFF
GLOBAL_VALUE OFF
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE OFF
VARIABLE_SCOPE SESSION
VARIABLE_TYPE BOOLEAN
VARIABLE_COMMENT Force system versioning for all created tables
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST OFF,ON
READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME VERSIONING_HIDE
SESSION_VALUE AUTO
GLOBAL_VALUE AUTO
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE AUTO
VARIABLE_SCOPE SESSION
VARIABLE_TYPE ENUM
VARIABLE_COMMENT Hide system versioning from being displayed in table info. AUTO: hide implicit system fields only in non-versioned and AS OF queries; IMPLICIT: hide implicit system fields in all queries; FULL: hide any system fields in all queries and hide versioning info in SHOW commands; NEVER: don't hide system fields
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST AUTO,IMPLICIT,FULL,NEVER
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME VERSIONING_INNODB_ALGORITHM_SIMPLE
SESSION_VALUE ON
GLOBAL_VALUE ON
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE ON
VARIABLE_SCOPE SESSION
VARIABLE_TYPE BOOLEAN
VARIABLE_COMMENT Use simple algorithm of timestamp handling in InnoDB instead of TRX_SEES
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST OFF,ON
READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME WAIT_TIMEOUT VARIABLE_NAME WAIT_TIMEOUT
SESSION_VALUE 28800 SESSION_VALUE 28800
GLOBAL_VALUE 28800 GLOBAL_VALUE 28800

View File

@ -1,2 +1,2 @@
--versioning-hide=implicit --system-versioning-hide=implicit
--plugin-load=versioning --plugin-load=versioning

View File

@ -1,5 +1,5 @@
select @@versioning_alter_history; select @@system_versioning_alter_history;
@@versioning_alter_history @@system_versioning_alter_history
ERROR ERROR
create table t( create table t(
a int a int
@ -21,7 +21,7 @@ t CREATE TABLE `t` (
PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING ) ENGINE=MyISAM DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
alter table t add column y int; alter table t add column y int;
ERROR HY000: Not allowed for versioned `test`.`t`. Change `versioning_alter_history` to proceed with ALTER. ERROR HY000: Not allowed for versioned `test`.`t`. Change @@system_versioning_alter_history to proceed with ALTER.
alter table t engine innodb; alter table t engine innodb;
ERROR HY000: Not allowed for versioned `test`.`t`. Change to/from native versioning engine is prohibited. ERROR HY000: Not allowed for versioned `test`.`t`. Change to/from native versioning engine is prohibited.
alter table t drop system versioning; alter table t drop system versioning;
@ -30,7 +30,7 @@ Table Create Table
t CREATE TABLE `t` ( t CREATE TABLE `t` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
set versioning_alter_history= keep; set system_versioning_alter_history= keep;
alter table t alter table t
add column trx_start bigint(20) unsigned generated always as row start, add column trx_start bigint(20) unsigned generated always as row start,
add column trx_end bigint(20) unsigned generated always as row end, add column trx_end bigint(20) unsigned generated always as row end,
@ -398,6 +398,16 @@ t CREATE TABLE `t` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
call verify_vtq; call verify_vtq;
No A B C D No A B C D
create or replace table t (a int);
insert t values (1),(2),(3),(4);
alter table t add b int auto_increment null unique;
select * from t;
a b
1 1
2 2
3 3
4 4
drop table t;
create or replace table t (a int) with system versioning engine=innodb; create or replace table t (a int) with system versioning engine=innodb;
insert into t values (1), (2), (3); insert into t values (1), (2), (3);
delete from t where a<3; delete from t where a<3;
@ -493,10 +503,10 @@ Table Create Table
t CREATE TABLE `t` ( t CREATE TABLE `t` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
set versioning_alter_history= SURVIVE; set system_versioning_alter_history= SURVIVE;
ERROR 42000: Variable 'versioning_alter_history' can't be set to the value of 'SURVIVE' ERROR 42000: Variable 'system_versioning_alter_history' can't be set to the value of 'SURVIVE'
set versioning_alter_history= DROP; set system_versioning_alter_history= DROP;
ERROR 42000: Variable 'versioning_alter_history' can't be set to the value of 'DROP' ERROR 42000: Variable 'system_versioning_alter_history' can't be set to the value of 'DROP'
create or replace table t (a int) with system versioning; create or replace table t (a int) with system versioning;
alter table t add system versioning; alter table t add system versioning;
ERROR HY000: Table `t` is already system-versioned table ERROR HY000: Table `t` is already system-versioned table

View File

@ -119,13 +119,13 @@ emp_id name mgr address
2 bill 1 New York 2 bill 1 New York
3 kate 1 London 3 kate 1 London
4 john 1 Paris 4 john 1 Paris
with ancestors as (select * from emp natural join addr where 1 for system_time all) select * from ancestors; with ancestors as (select * from (select * from emp natural join addr) for system_time all as t) select * from ancestors;
emp_id name mgr address emp_id name mgr address
1 bill 0 Moscow 1 bill 0 Moscow
2 bill 1 New York 2 bill 1 New York
3 kate 1 London 3 kate 1 London
4 john 1 Paris 4 john 1 Paris
select * from emp natural join addr where 1 for system_time all; select * from (select * from emp natural join addr) for system_time all as t;
emp_id name mgr address emp_id name mgr address
1 bill 0 Moscow 1 bill 0 Moscow
2 bill 1 New York 2 bill 1 New York

View File

@ -91,13 +91,11 @@ ancestors
as as
( (
select e.emp_id, e.name, e.mgr select e.emp_id, e.name, e.mgr
from emp as e from emp for system_time as of timestamp @ts as e
where name = 'bill' where name = 'bill'
for system_time as of timestamp @ts union
union
select ee.emp_id, ee.name, ee.mgr select ee.emp_id, ee.name, ee.mgr
from emp from emp for system_time as of timestamp @ts as ee,
for system_time as of timestamp @ts as ee,
ancestors as a ancestors as a
where ee.mgr = a.emp_id where ee.mgr = a.emp_id
) )
@ -112,9 +110,8 @@ ancestors
as as
( (
select e.emp_id, e.name, e.mgr select e.emp_id, e.name, e.mgr
from emp as e from emp for system_time as of timestamp @ts as e
where name = 'bill' where name = 'bill'
for system_time as of timestamp @ts
union union
select ee.emp_id, ee.name, ee.mgr select ee.emp_id, ee.name, ee.mgr
from emp for system_time as of timestamp @ts as ee, from emp for system_time as of timestamp @ts as ee,
@ -170,7 +167,7 @@ select * from (select * from vt1, t2) as s0;
x y x y
1 10 1 10
### SYSTEM_TIME clash ### SYSTEM_TIME clash
select * from (select * from t1 for system_time all) dt0 for system_time all; select * from (select * from t1 for system_time all) for system_time all as dt0;
ERROR HY000: SYSTEM_TIME is not allowed outside historical `dt0` ERROR HY000: SYSTEM_TIME is not allowed outside historical `dt0`
select * from vt1 for system_time all; select * from vt1 for system_time all;
ERROR HY000: SYSTEM_TIME is not allowed outside historical `vt1` ERROR HY000: SYSTEM_TIME is not allowed outside historical `vt1`

View File

@ -25,7 +25,7 @@ a b
3 NULL 3 NULL
Warnings: Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query Warning 4112 Attempt to read unversioned field `b` in historical query
select count(*) from t group by b for system_time as of timestamp now(6); select count(*) from t for system_time as of timestamp now(6) group by b;
count(*) count(*)
2 2
Warnings: Warnings:
@ -44,41 +44,10 @@ a b
Warnings: Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query Warning 4112 Attempt to read unversioned field `b` in historical query
Warning 4112 Attempt to read unversioned field `b` in historical query Warning 4112 Attempt to read unversioned field `b` in historical query
select * from t group by a having a=2 for system_time as of timestamp now(6); select * from t for system_time as of timestamp now(6) group by a having a=2;
a b a b
Warnings: Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query Warning 4112 Attempt to read unversioned field `b` in historical query
select * from t group by b having b=2 for system_time as of timestamp now(6);
a b
Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query
select a from t where b=2 for system_time as of timestamp now(6);
a
Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query
select a from t where b=NULL for system_time as of timestamp now(6);
a
Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query
select a from t where b is NULL for system_time as of timestamp now(6);
a
1
3
Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query
select count(*), b from t group by b having b=NULL for system_time as of timestamp now(6);
count(*) b
Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query
select a, b from t;
a b
1 2
3 4
select count(*) from t for system_time as of timestamp now(6) group by b;
count(*)
2
Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query
select * from t for system_time as of timestamp now(6) group by b having b=2; select * from t for system_time as of timestamp now(6) group by b having b=2;
a b a b
Warnings: Warnings:
@ -101,6 +70,10 @@ select count(*), b from t for system_time as of timestamp now(6) group by b havi
count(*) b count(*) b
Warnings: Warnings:
Warning 4112 Attempt to read unversioned field `b` in historical query Warning 4112 Attempt to read unversioned field `b` in historical query
select a, b from t;
a b
1 2
3 4
create or replace table t ( create or replace table t (
a int, a int,
b int not null without system versioning b int not null without system versioning

View File

@ -22,10 +22,10 @@ select * from t1 for system_time all;
x x
3 3
300 300
select * from t1 partition (p0) for system_time all; select * from t1 partition (p0);
x x
3 3
select * from t1 partition (p1) for system_time all; select * from t1 partition (p1);
x x
300 300
### Engine change versioned/non-versioned prohibited ### Engine change versioned/non-versioned prohibited
@ -35,50 +35,50 @@ ERROR HY000: Not allowed for versioned `test`.`t1`. Change to/from native versio
### check server-level partitioning ### check server-level partitioning
create or replace table t1 (x int) create or replace table t1 (x int)
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
ERROR HY000: Engine does not support System Versioning for `t1` ERROR HY000: Engine does not support System Versioning for `t1`
create or replace table t1 (x int); create or replace table t1 (x int);
alter table t1 alter table t1
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
Got one of the listed errors Got one of the listed errors
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 as of current_timestamp); partition p0 current);
ERROR HY000: Wrong partitions consistency for `t1`: must have at least one 'VERSIONING' and exactly one last 'AS OF NOW' ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 as of current_timestamp, partition p0 current,
partition p1 as of current_timestamp); partition p1 current);
ERROR HY000: Wrong partitions consistency for `t1`: must have at least one 'VERSIONING' and exactly one last 'AS OF NOW' ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition p1 versioning); partition p1 history);
ERROR HY000: Wrong partitions consistency for `t1`: must have at least one 'VERSIONING' and exactly one last 'AS OF NOW' ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition pn as of current_timestamp, partition pn current,
partition p0 versioning); partition p0 history);
ERROR HY000: Wrong partitions consistency for `t1`: must have at least one 'VERSIONING' and exactly one last 'AS OF NOW' ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
alter table t1 add partition ( alter table t1 add partition (
partition p1 as of current_timestamp); partition p1 current);
ERROR HY000: Wrong partitions consistency for `t1`: must have at least one 'VERSIONING' and exactly one last 'AS OF NOW' ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT
alter table t1 add partition ( alter table t1 add partition (
partition p1 versioning); partition p1 history);
Warnings: Warnings:
Warning 4115 Maybe missing parameters: no rotation condition for multiple `VERSIONING` partitions. Warning 4115 Maybe missing parameters: no rotation condition for multiple HISTORY partitions.
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
@ -88,15 +88,15 @@ t1 CREATE TABLE `t1` (
PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`)
) ENGINE=${INNODB_OR_MYISAM} DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING ) ENGINE=${INNODB_OR_MYISAM} DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
PARTITION BY SYSTEM_TIME PARTITION BY SYSTEM_TIME
(PARTITION `p0` VERSIONING ENGINE = ${INNODB_OR_MYISAM}, (PARTITION `p0` HISTORY ENGINE = ${INNODB_OR_MYISAM},
PARTITION `p1` VERSIONING ENGINE = ${INNODB_OR_MYISAM}, PARTITION `p1` HISTORY ENGINE = ${INNODB_OR_MYISAM},
PARTITION `pn` AS OF CURRENT_TIMESTAMP ENGINE = ${INNODB_OR_MYISAM}) PARTITION `pn` CURRENT ENGINE = ${INNODB_OR_MYISAM})
insert into t1 values (1), (2); insert into t1 values (1), (2);
alter table t1 drop partition pn; alter table t1 drop partition pn;
ERROR HY000: Wrong partitions consistency for `t1`: must have at least one 'VERSIONING' and exactly one last 'AS OF NOW' ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT
alter table t1 drop partition p1; alter table t1 drop partition p1;
alter table t1 drop partition p0; alter table t1 drop partition p0;
ERROR HY000: Wrong partitions consistency for `t1`: must have at least one 'VERSIONING' and exactly one last 'AS OF NOW' ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT
select x from t1; select x from t1;
x x
1 1
@ -104,15 +104,15 @@ x
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
set @now= now(6); set @now= now(6);
insert into t1 values (1); insert into t1 values (1);
set @ts_start= sys_commit_ts('sys_trx_start'); set @ts_start= sys_commit_ts('sys_trx_start');
set @ts_end= sys_commit_ts('sys_trx_end'); set @ts_end= sys_commit_ts('sys_trx_end');
set @str= concat('select x, ', @ts_start, ' < @now as A, ', @ts_end, ' > @now as B from t1 partition (p0) for system_time all'); set @str= concat('select x, ', @ts_start, ' < @now as A, ', @ts_end, ' > @now as B from t1 partition (p0)');
prepare select_p0 from @str; prepare select_p0 from @str;
set @str= concat('select x, ', @ts_start, ' > @now as C, ', @ts_end, ' = timestamp\'2038-01-19 03:14:07.999999\' as D from t1 partition (pn) for system_time all'); set @str= concat('select x, ', @ts_start, ' > @now as C, ', @ts_end, ' = timestamp\'2038-01-19 03:14:07.999999\' as D from t1 partition (pn)');
prepare select_pn from @str; prepare select_pn from @str;
execute select_p0; execute select_p0;
x A B x A B
@ -133,7 +133,7 @@ x A B
1 1 1 1 1 1
execute select_pn; execute select_pn;
x C D x C D
set @str= concat('select ', @ts_start, ' from t1 partition (p0) for system_time all into @ts1'); set @str= concat('select ', @ts_start, ' from t1 partition (p0) into @ts1');
prepare stmt from @str; prepare stmt from @str;
execute stmt; execute stmt;
drop prepare stmt; drop prepare stmt;
@ -163,11 +163,11 @@ x C D
3 1 1 3 1 1
drop prepare select_p0; drop prepare select_p0;
drop prepare select_pn; drop prepare select_pn;
set @str= concat('select ', @ts_start, ' from t1 partition (p0) for system_time all where x = 2 into @ts1'); set @str= concat('select ', @ts_start, ' from t1 partition (p0) where x = 2 into @ts1');
prepare stmt from @str; prepare stmt from @str;
execute stmt; execute stmt;
drop prepare stmt; drop prepare stmt;
set @str= concat('select ', @ts_end, ' from t1 partition (p0) for system_time all where x = 2 into @ts2'); set @str= concat('select ', @ts_end, ' from t1 partition (p0) where x = 2 into @ts2');
prepare stmt from @str; prepare stmt from @str;
execute stmt; execute stmt;
drop prepare stmt; drop prepare stmt;
@ -184,16 +184,16 @@ select @ts2 = @ts3;
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time limit 0 ( partition by system_time limit 0 (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
ERROR HY000: Wrong parameters for partitioned `t1`: wrong value for 'LIMIT' ERROR HY000: Wrong parameters for partitioned `t1`: wrong value for 'LIMIT'
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time limit 1 ( partition by system_time limit 1 (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
@ -203,9 +203,9 @@ t1 CREATE TABLE `t1` (
PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`) PERIOD FOR SYSTEM_TIME (`sys_trx_start`, `sys_trx_end`)
) ENGINE=${INNODB_OR_MYISAM} DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING ) ENGINE=${INNODB_OR_MYISAM} DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
PARTITION BY SYSTEM_TIME LIMIT 1 PARTITION BY SYSTEM_TIME LIMIT 1
(PARTITION `p0` VERSIONING ENGINE = ${INNODB_OR_MYISAM}, (PARTITION `p0` HISTORY ENGINE = ${INNODB_OR_MYISAM},
PARTITION `p1` VERSIONING ENGINE = ${INNODB_OR_MYISAM}, PARTITION `p1` HISTORY ENGINE = ${INNODB_OR_MYISAM},
PARTITION `pn` AS OF CURRENT_TIMESTAMP ENGINE = ${INNODB_OR_MYISAM}) PARTITION `pn` CURRENT ENGINE = ${INNODB_OR_MYISAM})
alter table t1 drop partition non_existent; alter table t1 drop partition non_existent;
ERROR HY000: Error in list of partitions to DROP ERROR HY000: Error in list of partitions to DROP
insert into t1 values (1), (2); insert into t1 values (1), (2);
@ -215,34 +215,34 @@ x
2 2
delete from t1; delete from t1;
Warnings: Warnings:
Note 4116 Switching from partition `p0` to `p1` Note 4116 Versioned table `test`.`t1`: switching from partition `p0` to `p1`
select * from t1 partition (p0) for system_time all; select * from t1 partition (p0);
x x
1 1
select * from t1 partition (p1) for system_time all; select * from t1 partition (p1);
x x
2 2
insert into t1 values (3); insert into t1 values (3);
delete from t1; delete from t1;
Warnings: Warnings:
Warning 4114 Using full partition `p1`, need more VERSIONING partitions! Warning 4114 Versioned table `test`.`t1`: partition `p1` is full, add more HISTORY partitions
select * from t1 partition (p1) for system_time all; select * from t1 partition (p1);
x x
2 2
3 3
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time interval 0 second ( partition by system_time interval 0 second (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
ERROR HY000: Wrong parameters for partitioned `t1`: wrong value for 'INTERVAL' ERROR HY000: Wrong parameters for partitioned `t1`: wrong value for 'INTERVAL'
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time interval 1 second ( partition by system_time interval 1 second (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
insert into t1 values (1), (2), (3); insert into t1 values (1), (2), (3);
select * from t1 partition (pn); select * from t1 partition (pn);
x x
@ -250,7 +250,7 @@ x
2 2
3 3
delete from t1; delete from t1;
select * from t1 partition (p0) for system_time all; select * from t1 partition (p0);
x x
1 1
2 2
@ -258,8 +258,8 @@ x
insert into t1 values (4); insert into t1 values (4);
delete from t1; delete from t1;
Warnings: Warnings:
Note 4116 Switching from partition `p0` to `p1` Note 4116 Versioned table `test`.`t1`: switching from partition `p0` to `p1`
select * from t1 partition (p1) for system_time all; select * from t1 partition (p1);
x x
4 4
create or replace table t1 (x int) create or replace table t1 (x int)
@ -267,9 +267,9 @@ with system versioning
partition by system_time limit 1 partition by system_time limit 1
subpartition by key (x) subpartition by key (x)
subpartitions 2 ( subpartitions 2 (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
insert into t1 (x) values (1), (2), (3); insert into t1 (x) values (1), (2), (3);
select * from t1 partition (pnsp0); select * from t1 partition (pnsp0);
x x
@ -280,17 +280,17 @@ x
2 2
delete from t1; delete from t1;
Warnings: Warnings:
Note 4116 Switching from partition `p0` to `p1` Note 4116 Versioned table `test`.`t1`: switching from partition `p0` to `p1`
Warning 4114 Using full partition `p1`, need more VERSIONING partitions! Warning 4114 Versioned table `test`.`t1`: partition `p1` is full, add more HISTORY partitions
select * from t1 partition (p0sp0) for system_time all; select * from t1 partition (p0sp0);
x x
1 1
select * from t1 partition (p0sp1) for system_time all; select * from t1 partition (p0sp1);
x x
select * from t1 partition (p1sp0) for system_time all; select * from t1 partition (p1sp0);
x x
3 3
select * from t1 partition (p1sp1) for system_time all; select * from t1 partition (p1sp1);
x x
2 2
create or replace table t1 (a bigint) create or replace table t1 (a bigint)

View File

@ -144,22 +144,43 @@ NULL NULL 2 1
NULL NULL 3 1 NULL NULL 3 1
delete from t1; delete from t1;
delete from t2; delete from t2;
select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x explain extended select * from (select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x)
for system_time as of timestamp @t0; for system_time as of timestamp @t0 as t;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 100.00 Using where
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 100.00 Using where; Using join buffer (flat, BNL join)
Warnings:
Note 1003 select `test`.`t1`.`x` AS `IJ2_x1`,`test`.`t1`.`y` AS `y1`,`test`.`t2`.`x` AS `x2`,`test`.`t2`.`y` AS `y2` from `test`.`t1` FOR SYSTEM_TIME ALL join `test`.`t2` FOR SYSTEM_TIME ALL where `test`.`t1`.`x` = `test`.`t2`.`x` and `test`.`t1`.`sys_trx_end` > <cache>(cast(@`t0` as datetime(6))) and `test`.`t1`.`sys_trx_start` <= <cache>(cast(@`t0` as datetime(6))) and `test`.`t2`.`sys_trx_end` > <cache>(cast(@`t0` as datetime(6))) and `test`.`t2`.`sys_trx_start` <= <cache>(cast(@`t0` as datetime(6)))
explain extended select * from (select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x)
for system_time as of timestamp @t0 as t;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 100.00
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
Warnings:
Note 1003 select `test`.`t1`.`x` AS `LJ2_x1`,`test`.`t1`.`y` AS `y1`,`test`.`t2`.`x` AS `x2`,`test`.`t2`.`y` AS `y2` from `test`.`t1` FOR SYSTEM_TIME ALL left join `test`.`t2` FOR SYSTEM_TIME ALL on(`test`.`t2`.`x` = `test`.`t1`.`x` and `test`.`t1`.`sys_trx_end` > <cache>(cast(@`t0` as datetime(6))) and `test`.`t1`.`sys_trx_start` <= <cache>(cast(@`t0` as datetime(6))) and `test`.`t2`.`sys_trx_end` > <cache>(cast(@`t0` as datetime(6))) and `test`.`t2`.`sys_trx_start` <= <cache>(cast(@`t0` as datetime(6)))) where 1
explain extended select * from (select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x)
for system_time as of timestamp @t0 as t;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 100.00
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 100.00 Using where; Using join buffer (flat, BNL join)
Warnings:
Note 1003 select `test`.`t1`.`x` AS `RJ2_x1`,`test`.`t1`.`y` AS `y1`,`test`.`t2`.`x` AS `x2`,`test`.`t2`.`y` AS `y2` from `test`.`t2` FOR SYSTEM_TIME ALL left join `test`.`t1` FOR SYSTEM_TIME ALL on(`test`.`t1`.`x` = `test`.`t2`.`x` and `test`.`t1`.`sys_trx_end` > <cache>(cast(@`t0` as datetime(6))) and `test`.`t1`.`sys_trx_start` <= <cache>(cast(@`t0` as datetime(6))) and `test`.`t2`.`sys_trx_end` > <cache>(cast(@`t0` as datetime(6))) and `test`.`t2`.`sys_trx_start` <= <cache>(cast(@`t0` as datetime(6)))) where 1
select * from (select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x)
for system_time as of timestamp @t0 as t;
IJ2_x1 y1 x2 y2 IJ2_x1 y1 x2 y2
1 1 1 2 1 1 1 2
1 2 1 2 1 2 1 2
1 3 1 2 1 3 1 2
select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x select * from (select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x)
for system_time as of timestamp @t0; for system_time as of timestamp @t0 as t;
LJ2_x1 y1 x2 y2 LJ2_x1 y1 x2 y2
1 1 1 2 1 1 1 2
1 2 1 2 1 2 1 2
1 3 1 2 1 3 1 2
4 4 NULL NULL 4 4 NULL NULL
5 5 NULL NULL 5 5 NULL NULL
select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x select * from (select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x)
for system_time as of timestamp @t0; for system_time as of timestamp @t0 as t;
RJ2_x1 y1 x2 y2 RJ2_x1 y1 x2 y2
1 1 1 2 1 1 1 2
1 2 1 2 1 2 1 2
@ -280,8 +301,9 @@ select * from t1, t2 for system_time all;
x y x y
1 1 1 1
2 1 2 1
select * from t1 for system_time all, t2 for system_time all for system_time all; select * from (select * from t1 for system_time all, t2 for system_time all)
ERROR HY000: Unused clause: 'SYSTEM_TIME' for system_time all as t;
ERROR HY000: SYSTEM_TIME is not allowed outside historical `t`
# TRANSACTION/TIMESTAMP specifier in SYSTEM_TIME [MDEV-14645, Issue #396] # TRANSACTION/TIMESTAMP specifier in SYSTEM_TIME [MDEV-14645, Issue #396]
create or replace table t1 (x int) with system versioning engine myisam; create or replace table t1 (x int) with system versioning engine myisam;
select * from t1 for system_time as of transaction 1; select * from t1 for system_time as of transaction 1;

View File

@ -77,12 +77,12 @@ select t1.x as LJ1_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 o
select t1.x as RJ1_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x; select t1.x as RJ1_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x;
delete from t1; delete from t1;
delete from t2; delete from t2;
select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x select IJ2_x1,y1,x2,y2 from (select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x)
for system_time as of timestamp @t0; for system_time as of timestamp @t0 as t;
select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x select LJ2_x1,y1,x2,y2 from (select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x)
for system_time as of timestamp @t0; for system_time as of timestamp @t0 as t;
select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x select RJ2_x1,y1,x2,y2 from (select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x)
for system_time as of timestamp @t0; for system_time as of timestamp @t0 as t;
drop table t1; drop table t1;
drop table t2; drop table t2;
end~~ end~~
@ -321,8 +321,10 @@ select * from t1, t2 for system_time all;
x y x y
1 1 1 1
2 1 2 1
select * from t1 for system_time all, t2 for system_time all for system_time all; select * from (select * from t1 for system_time all, t2 for system_time all) for system_time all as t;
ERROR HY000: Unused clause: 'SYSTEM_TIME' ERROR HY000: SYSTEM_TIME is not allowed outside historical `t`
select * from (t1 for system_time all join t2 for system_time all) for system_time all;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
drop view v1; drop view v1;
drop table t1, t2; drop table t1, t2;
call innodb_verify_vtq(27); call innodb_verify_vtq(27);

View File

@ -42,31 +42,32 @@ where d.dept_id = 10
and d.dept_id = e.dept_id; and d.dept_id = e.dept_id;
emp_id dept_id name salary dept_id name emp_id dept_id name salary dept_id name
1 10 bill 2000 10 accounting 1 10 bill 2000 10 accounting
select * from emp e, dept d select * from
emp for system_time from timestamp @ts_1 to timestamp @ts_2 e,
dept for system_time from timestamp @ts_1 to timestamp @ts_2 d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time from timestamp @ts_1 to timestamp @ts_2;
emp_id dept_id name salary sys_trx_start sys_trx_end dept_id name sys_trx_start sys_trx_end emp_id dept_id name salary sys_trx_start sys_trx_end dept_id name sys_trx_start sys_trx_end
set statement system_versioning_asof=@ts_0 for
select * from emp e, dept d select * from emp e, dept d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time as of timestamp @ts_0;
emp_id dept_id name salary dept_id name emp_id dept_id name salary dept_id name
set statement system_versioning_asof=@ts_1 for
select * from emp e, dept d select * from emp e, dept d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time as of timestamp @ts_1;
emp_id dept_id name salary dept_id name emp_id dept_id name salary dept_id name
set statement system_versioning_asof=@ts_2 for
select * from emp e, dept d select * from emp e, dept d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time as of timestamp @ts_2;
emp_id dept_id name salary dept_id name emp_id dept_id name salary dept_id name
1 10 bill 1000 10 accounting 1 10 bill 1000 10 accounting
set statement system_versioning_asof=@ts_3 for
select * from emp e, dept d select * from emp e, dept d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time as of timestamp @ts_3;
emp_id dept_id name salary dept_id name emp_id dept_id name salary dept_id name
1 10 bill 2000 10 accounting 1 10 bill 2000 10 accounting
drop table emp, dept; drop table emp, dept;

View File

@ -1,116 +1,98 @@
create table t (a int) with system versioning; create table t (a int) with system versioning;
insert into t values (1); insert into t values (1);
update t set a= 2; update t set a= 2;
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp CURRENT system_versioning_asof DEFAULT
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp CURRENT system_versioning_asof DEFAULT
select * from t; select * from t;
a a
2 2
set versioning_asof_timestamp= '2031-1-1 0:0:0'; set system_versioning_asof= '2031-1-1 0:0:0';
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 2031-01-01 00:00:00.000000 system_versioning_asof 2031-01-01 00:00:00.000000
select * from t; select * from t;
a a
2 2
set versioning_asof_timestamp= '2011-1-1 0:0:0'; set system_versioning_asof= '2011-1-1 0:0:0';
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 2011-01-01 00:00:00.000000 system_versioning_asof 2011-01-01 00:00:00.000000
select * from t; select * from t;
a a
set versioning_asof_timestamp= ALL; set global system_versioning_asof= 'alley';
show variables like 'versioning_asof_timestamp'; ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of 'alley'
Variable_name Value set global system_versioning_asof= null;
versioning_asof_timestamp ALL ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of 'NULL'
select * from t; set global system_versioning_asof= 1;
a ERROR 42000: Incorrect argument type to variable 'system_versioning_asof'
2 set global system_versioning_asof= 1.1;
1 ERROR 42000: Incorrect argument type to variable 'system_versioning_asof'
create view vt as select * from t; set system_versioning_asof= 'alley';
select * from t; ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of 'alley'
a set system_versioning_asof= null;
2 ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of 'NULL'
1 set system_versioning_asof= 1;
drop view vt; ERROR 42000: Incorrect argument type to variable 'system_versioning_asof'
select * from (select * from t) as tt; set system_versioning_asof= 1.1;
a ERROR 42000: Incorrect argument type to variable 'system_versioning_asof'
2 set global system_versioning_asof= '1911-11-11 11:11:11.1111119';
1
set global versioning_asof_timestamp= 'alley';
ERROR 42000: Variable 'versioning_asof_timestamp' can't be set to the value of 'alley'
set global versioning_asof_timestamp= null;
ERROR 42000: Variable 'versioning_asof_timestamp' can't be set to the value of 'NULL'
set global versioning_asof_timestamp= 1;
ERROR 42000: Incorrect argument type to variable 'versioning_asof_timestamp'
set global versioning_asof_timestamp= 1.1;
ERROR 42000: Incorrect argument type to variable 'versioning_asof_timestamp'
set versioning_asof_timestamp= 'alley';
ERROR 42000: Variable 'versioning_asof_timestamp' can't be set to the value of 'alley'
set versioning_asof_timestamp= null;
ERROR 42000: Variable 'versioning_asof_timestamp' can't be set to the value of 'NULL'
set versioning_asof_timestamp= 1;
ERROR 42000: Incorrect argument type to variable 'versioning_asof_timestamp'
set versioning_asof_timestamp= 1.1;
ERROR 42000: Incorrect argument type to variable 'versioning_asof_timestamp'
set global versioning_asof_timestamp= '1911-11-11 11:11:11.1111119';
Warnings: Warnings:
Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119' Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119'
Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119' Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119'
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 1911-11-11 11:11:11.111111 system_versioning_asof 1911-11-11 11:11:11.111111
set global versioning_asof_timestamp= '1900-01-01 00:00:00'; set global system_versioning_asof= '1900-01-01 00:00:00';
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 1900-01-01 00:00:00.000000 system_versioning_asof 1900-01-01 00:00:00.000000
set global versioning_asof_timestamp= timestamp'1911-11-11 11:11:11.1111119'; set global system_versioning_asof= timestamp'1911-11-11 11:11:11.1111119';
Warnings: Warnings:
Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119' Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119'
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 1911-11-11 11:11:11.111111 system_versioning_asof 1911-11-11 11:11:11.111111
set @ts= timestamp'1900-01-01 00:00:00'; set @ts= timestamp'1900-01-01 00:00:00';
set global versioning_asof_timestamp= @ts; set global system_versioning_asof= @ts;
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 1900-01-01 00:00:00.000000 system_versioning_asof 1900-01-01 00:00:00.000000
set versioning_asof_timestamp= '1911-11-11 11:11:11.1111119'; set system_versioning_asof= '1911-11-11 11:11:11.1111119';
Warnings: Warnings:
Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119' Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119'
Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119' Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119'
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 1911-11-11 11:11:11.111111 system_versioning_asof 1911-11-11 11:11:11.111111
set versioning_asof_timestamp= '1900-01-01 00:00:00'; set system_versioning_asof= '1900-01-01 00:00:00';
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 1900-01-01 00:00:00.000000 system_versioning_asof 1900-01-01 00:00:00.000000
set versioning_asof_timestamp= timestamp'1911-11-11 11:11:11.1111119'; set system_versioning_asof= timestamp'1911-11-11 11:11:11.1111119';
Warnings: Warnings:
Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119' Note 1292 Truncated incorrect datetime value: '1911-11-11 11:11:11.1111119'
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 1911-11-11 11:11:11.111111 system_versioning_asof 1911-11-11 11:11:11.111111
set @ts= timestamp'1900-01-01 00:00:00'; set @ts= timestamp'1900-01-01 00:00:00';
set versioning_asof_timestamp= @ts; set system_versioning_asof= @ts;
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
Variable_name Value Variable_name Value
versioning_asof_timestamp 1900-01-01 00:00:00.000000 system_versioning_asof 1900-01-01 00:00:00.000000
set global versioning_asof_timestamp= CURRENT; set global system_versioning_asof= DEFAULT;
set versioning_asof_timestamp= CURRENT; set system_versioning_asof= DEFAULT;
show variables where variable_name = "versioning_hide"; show variables where variable_name = "system_versioning_hide";
Variable_name Value Variable_name Value
versioning_hide IMPLICIT system_versioning_hide IMPLICIT
select * from t for system_time all; select * from t for system_time all;
a a
2 2
1 1
set versioning_hide= AUTO; set system_versioning_hide= AUTO;
select * from t; select * from t;
a a
2 2
@ -129,11 +111,11 @@ select * from t for system_time between '0-0-0' and current_timestamp(6);
a sys_trx_start sys_trx_end a sys_trx_start sys_trx_end
2 TIMESTAMP TIMESTAMP 2 TIMESTAMP TIMESTAMP
1 TIMESTAMP TIMESTAMP 1 TIMESTAMP TIMESTAMP
set versioning_hide= NEVER; set system_versioning_hide= NEVER;
select * from t; select * from t;
a sys_trx_start sys_trx_end a sys_trx_start sys_trx_end
2 TIMESTAMP TIMESTAMP 2 TIMESTAMP TIMESTAMP
set versioning_hide= FULL; set system_versioning_hide= FULL;
create or replace table t ( create or replace table t (
x int, x int,
st timestamp(6) generated always as row start, st timestamp(6) generated always as row start,
@ -153,4 +135,4 @@ select * from t for system_time all;
x x
2 2
drop table t; drop table t;
set versioning_hide= IMPLICIT; set system_versioning_hide= IMPLICIT;

View File

@ -39,8 +39,8 @@ create or replace table t (a int)
with system versioning with system versioning
engine myisam engine myisam
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
truncate table t to system_time current_timestamp; truncate table t to system_time current_timestamp;
ERROR 42000: The used command is not allowed with this MariaDB version ERROR 42000: The used command is not allowed with this MariaDB version
drop table t; drop table t;

View File

@ -13,8 +13,8 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
truncate mysqltest.t to system_time now(); truncate mysqltest.t to system_time now();
ERROR 42000: DELETE VERSIONING ROWS command denied to user 'mysqltest_1'@'localhost' for table 't' ERROR 42000: DELETE VERSIONING ROWS command denied to user 'mysqltest_1'@'localhost' for table 't'
connection root; connection root;
grant delete versioning rows on mysqltest.* to mysqltest_1@localhost; grant delete history on mysqltest.* to mysqltest_1@localhost;
grant delete versioning rows on mysqltest.t to mysqltest_1@localhost; grant delete history on mysqltest.t to mysqltest_1@localhost;
connection user1; connection user1;
show grants; show grants;
Grants for mysqltest_1@localhost Grants for mysqltest_1@localhost

View File

@ -1,4 +1,4 @@
select @@versioning_alter_history; select @@system_versioning_alter_history;
create table t( create table t(
a int a int
@ -18,7 +18,7 @@ alter table t engine innodb;
alter table t drop system versioning; alter table t drop system versioning;
show create table t; show create table t;
set versioning_alter_history= keep; set system_versioning_alter_history= keep;
--error ER_VERS_FIELD_WRONG_TYPE --error ER_VERS_FIELD_WRONG_TYPE
alter table t alter table t
@ -205,6 +205,13 @@ alter table t drop system versioning, algorithm=copy;
show create table t; show create table t;
call verify_vtq; call verify_vtq;
# nullable autoinc test w/o versioning
create or replace table t (a int);
insert t values (1),(2),(3),(4);
alter table t add b int auto_increment null unique;
select * from t;
drop table t;
create or replace table t (a int) with system versioning engine=innodb; create or replace table t (a int) with system versioning engine=innodb;
insert into t values (1), (2), (3); insert into t values (1), (2), (3);
delete from t where a<3; delete from t where a<3;
@ -280,10 +287,10 @@ show create table t;
## These experimental options are now disabled ## These experimental options are now disabled
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set versioning_alter_history= SURVIVE; set system_versioning_alter_history= SURVIVE;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set versioning_alter_history= DROP; set system_versioning_alter_history= DROP;
if (0) if (0)
{ {

View File

@ -1,2 +1,2 @@
--plugin-load=versioning --plugin-load=versioning
--versioning-hide=implicit --system-versioning-hide=implicit

View File

@ -109,8 +109,8 @@ insert emp values (4, 'john', 1);
insert addr values (4, 'Paris'); insert addr values (4, 'Paris');
with ancestors as (select * from emp natural join addr) select * from ancestors; with ancestors as (select * from emp natural join addr) select * from ancestors;
with ancestors as (select * from emp natural join addr) select * from ancestors for system_time all; with ancestors as (select * from emp natural join addr) select * from ancestors for system_time all;
with ancestors as (select * from emp natural join addr where 1 for system_time all) select * from ancestors; with ancestors as (select * from (select * from emp natural join addr) for system_time all as t) select * from ancestors;
select * from emp natural join addr where 1 for system_time all; select * from (select * from emp natural join addr) for system_time all as t;
drop table emp; drop table emp;
drop table dept; drop table dept;

View File

@ -57,18 +57,17 @@ as
select * from ancestors"; select * from ancestors";
prepare stmt from @tmp; execute stmt; drop prepare stmt; prepare stmt from @tmp; execute stmt; drop prepare stmt;
#385
with recursive with recursive
ancestors ancestors
as as
( (
select e.emp_id, e.name, e.mgr select e.emp_id, e.name, e.mgr
from emp as e from emp for system_time as of timestamp @ts as e
where name = 'bill' where name = 'bill'
for system_time as of timestamp @ts
union union
select ee.emp_id, ee.name, ee.mgr select ee.emp_id, ee.name, ee.mgr
from emp from emp for system_time as of timestamp @ts as ee,
for system_time as of timestamp @ts as ee,
ancestors as a ancestors as a
where ee.mgr = a.emp_id where ee.mgr = a.emp_id
) )
@ -79,9 +78,8 @@ ancestors
as as
( (
select e.emp_id, e.name, e.mgr select e.emp_id, e.name, e.mgr
from emp as e from emp for system_time as of timestamp @ts as e
where name = 'bill' where name = 'bill'
for system_time as of timestamp @ts
union union
select ee.emp_id, ee.name, ee.mgr select ee.emp_id, ee.name, ee.mgr
from emp for system_time as of timestamp @ts as ee, from emp for system_time as of timestamp @ts as ee,
@ -125,7 +123,7 @@ select * from (select * from vt1, t2) as s0;
--echo ### SYSTEM_TIME clash --echo ### SYSTEM_TIME clash
--error ER_VERS_SYSTEM_TIME_CLASH --error ER_VERS_SYSTEM_TIME_CLASH
select * from (select * from t1 for system_time all) dt0 for system_time all; select * from (select * from t1 for system_time all) for system_time all as dt0;
--error ER_VERS_SYSTEM_TIME_CLASH --error ER_VERS_SYSTEM_TIME_CLASH
select * from vt1 for system_time all; select * from vt1 for system_time all;
--error ER_VERS_SYSTEM_TIME_CLASH --error ER_VERS_SYSTEM_TIME_CLASH

View File

@ -1 +1 @@
--versioning-hide=implicit --system-versioning-hide=implicit

View File

@ -9,23 +9,16 @@ select * from t;
select a from t for system_time as of timestamp now(6); select a from t for system_time as of timestamp now(6);
select a, b, b+0 from t for system_time as of timestamp now(6); select a, b, b+0 from t for system_time as of timestamp now(6);
select * from t for system_time as of timestamp now(6); select * from t for system_time as of timestamp now(6);
select count(*) from t group by b for system_time as of timestamp now(6); select count(*) from t for system_time as of timestamp now(6) group by b;
select * from t for system_time as of timestamp now(6) order by b asc; select * from t for system_time as of timestamp now(6) order by b asc;
select * from t for system_time as of timestamp now(6) order by b desc; select * from t for system_time as of timestamp now(6) order by b desc;
select * from t group by a having a=2 for system_time as of timestamp now(6); select * from t for system_time as of timestamp now(6) group by a having a=2;
select * from t group by b having b=2 for system_time as of timestamp now(6);
select a from t where b=2 for system_time as of timestamp now(6);
select a from t where b=NULL for system_time as of timestamp now(6);
select a from t where b is NULL for system_time as of timestamp now(6);
select count(*), b from t group by b having b=NULL for system_time as of timestamp now(6);
select a, b from t;
select count(*) from t for system_time as of timestamp now(6) group by b;
select * from t for system_time as of timestamp now(6) group by b having b=2; select * from t for system_time as of timestamp now(6) group by b having b=2;
select a from t for system_time as of timestamp now(6) where b=2; select a from t for system_time as of timestamp now(6) where b=2;
select a from t for system_time as of timestamp now(6) where b=NULL; select a from t for system_time as of timestamp now(6) where b=NULL;
select a from t for system_time as of timestamp now(6) where b is NULL; select a from t for system_time as of timestamp now(6) where b is NULL;
select count(*), b from t for system_time as of timestamp now(6) group by b having b=NULL; select count(*), b from t for system_time as of timestamp now(6) group by b having b=NULL;
select a, b from t;
create or replace table t ( create or replace table t (
a int, a int,

View File

@ -1,2 +1 @@
--partition --system-versioning-hide=implicit
--versioning-hide=implicit

View File

@ -1,3 +1,4 @@
-- source include/have_partition.inc
-- source suite/versioning/common.inc -- source suite/versioning/common.inc
--echo ### check System Versioning and conventional partitioning --echo ### check System Versioning and conventional partitioning
@ -16,8 +17,8 @@ select * from t1 partition (p1);
delete from t1; delete from t1;
select * from t1; select * from t1;
select * from t1 for system_time all; select * from t1 for system_time all;
select * from t1 partition (p0) for system_time all; select * from t1 partition (p0);
select * from t1 partition (p1) for system_time all; select * from t1 partition (p1);
--echo ### Engine change versioned/non-versioned prohibited --echo ### Engine change versioned/non-versioned prohibited
eval create or replace table t1 (i int) engine=$default_engine with system versioning partition by hash(i); eval create or replace table t1 (i int) engine=$default_engine with system versioning partition by hash(i);
@ -30,56 +31,56 @@ eval alter table t1 engine=$non_default_engine;
--error ER_VERS_ENGINE_UNSUPPORTED --error ER_VERS_ENGINE_UNSUPPORTED
create or replace table t1 (x int) create or replace table t1 (x int)
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
create or replace table t1 (x int); create or replace table t1 (x int);
--error ER_VERS_ENGINE_UNSUPPORTED,ER_VERS_ENGINE_UNSUPPORTED --error ER_VERS_ENGINE_UNSUPPORTED,ER_VERS_ENGINE_UNSUPPORTED
alter table t1 alter table t1
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
--error ER_VERS_WRONG_PARTS --error ER_VERS_WRONG_PARTS
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 as of current_timestamp); partition p0 current);
--error ER_VERS_WRONG_PARTS --error ER_VERS_WRONG_PARTS
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 as of current_timestamp, partition p0 current,
partition p1 as of current_timestamp); partition p1 current);
--error ER_VERS_WRONG_PARTS --error ER_VERS_WRONG_PARTS
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition p1 versioning); partition p1 history);
--error ER_VERS_WRONG_PARTS --error ER_VERS_WRONG_PARTS
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition pn as of current_timestamp, partition pn current,
partition p0 versioning); partition p0 history);
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
# alter table # alter table
--error ER_VERS_WRONG_PARTS --error ER_VERS_WRONG_PARTS
alter table t1 add partition ( alter table t1 add partition (
partition p1 as of current_timestamp); partition p1 current);
alter table t1 add partition ( alter table t1 add partition (
partition p1 versioning); partition p1 history);
--replace_result InnoDB ${INNODB_OR_MYISAM} MyISAM ${INNODB_OR_MYISAM} "bigint(20) unsigned" ${SYS_TRX_TYPE} timestamp(6) ${SYS_TRX_TYPE} --replace_result InnoDB ${INNODB_OR_MYISAM} MyISAM ${INNODB_OR_MYISAM} "bigint(20) unsigned" ${SYS_TRX_TYPE} timestamp(6) ${SYS_TRX_TYPE}
show create table t1; show create table t1;
@ -98,16 +99,16 @@ select x from t1;
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
set @now= now(6); set @now= now(6);
insert into t1 values (1); insert into t1 values (1);
set @ts_start= sys_commit_ts('sys_trx_start'); set @ts_start= sys_commit_ts('sys_trx_start');
set @ts_end= sys_commit_ts('sys_trx_end'); set @ts_end= sys_commit_ts('sys_trx_end');
set @str= concat('select x, ', @ts_start, ' < @now as A, ', @ts_end, ' > @now as B from t1 partition (p0) for system_time all'); set @str= concat('select x, ', @ts_start, ' < @now as A, ', @ts_end, ' > @now as B from t1 partition (p0)');
prepare select_p0 from @str; prepare select_p0 from @str;
set @str= concat('select x, ', @ts_start, ' > @now as C, ', @ts_end, ' = timestamp\'2038-01-19 03:14:07.999999\' as D from t1 partition (pn) for system_time all'); set @str= concat('select x, ', @ts_start, ' > @now as C, ', @ts_end, ' = timestamp\'2038-01-19 03:14:07.999999\' as D from t1 partition (pn)');
prepare select_pn from @str; prepare select_pn from @str;
execute select_p0; execute select_p0;
@ -125,7 +126,7 @@ delete from t1;
execute select_p0; execute select_p0;
execute select_pn; execute select_pn;
set @str= concat('select ', @ts_start, ' from t1 partition (p0) for system_time all into @ts1'); set @str= concat('select ', @ts_start, ' from t1 partition (p0) into @ts1');
prepare stmt from @str; execute stmt; drop prepare stmt; prepare stmt from @str; execute stmt; drop prepare stmt;
select @ts0 = @ts1; select @ts0 = @ts1;
@ -146,9 +147,9 @@ execute select_pn;
drop prepare select_p0; drop prepare select_p0;
drop prepare select_pn; drop prepare select_pn;
set @str= concat('select ', @ts_start, ' from t1 partition (p0) for system_time all where x = 2 into @ts1'); set @str= concat('select ', @ts_start, ' from t1 partition (p0) where x = 2 into @ts1');
prepare stmt from @str; execute stmt; drop prepare stmt; prepare stmt from @str; execute stmt; drop prepare stmt;
set @str= concat('select ', @ts_end, ' from t1 partition (p0) for system_time all where x = 2 into @ts2'); set @str= concat('select ', @ts_end, ' from t1 partition (p0) where x = 2 into @ts2');
prepare stmt from @str; execute stmt; drop prepare stmt; prepare stmt from @str; execute stmt; drop prepare stmt;
set @str= concat('select ', @ts_start, ' from t1 partition (pn) into @ts3'); set @str= concat('select ', @ts_start, ' from t1 partition (pn) into @ts3');
prepare stmt from @str; execute stmt; drop prepare stmt; prepare stmt from @str; execute stmt; drop prepare stmt;
@ -161,16 +162,16 @@ select @ts2 = @ts3;
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time limit 0 ( partition by system_time limit 0 (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time limit 1 ( partition by system_time limit 1 (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
--replace_result InnoDB ${INNODB_OR_MYISAM} MyISAM ${INNODB_OR_MYISAM} "bigint(20) unsigned" ${SYS_TRX_TYPE} timestamp(6) ${SYS_TRX_TYPE} --replace_result InnoDB ${INNODB_OR_MYISAM} MyISAM ${INNODB_OR_MYISAM} "bigint(20) unsigned" ${SYS_TRX_TYPE} timestamp(6) ${SYS_TRX_TYPE}
show create table t1; show create table t1;
@ -181,38 +182,38 @@ alter table t1 drop partition non_existent;
insert into t1 values (1), (2); insert into t1 values (1), (2);
select * from t1 partition (pn); select * from t1 partition (pn);
delete from t1; delete from t1;
select * from t1 partition (p0) for system_time all; select * from t1 partition (p0);
select * from t1 partition (p1) for system_time all; select * from t1 partition (p1);
insert into t1 values (3); insert into t1 values (3);
delete from t1; delete from t1;
select * from t1 partition (p1) for system_time all; select * from t1 partition (p1);
# rotation by INTERVAL # rotation by INTERVAL
--error ER_PART_WRONG_VALUE --error ER_PART_WRONG_VALUE
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time interval 0 second ( partition by system_time interval 0 second (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
create or replace table t1 (x int) create or replace table t1 (x int)
with system versioning with system versioning
partition by system_time interval 1 second ( partition by system_time interval 1 second (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
insert into t1 values (1), (2), (3); insert into t1 values (1), (2), (3);
select * from t1 partition (pn); select * from t1 partition (pn);
delete from t1; delete from t1;
select * from t1 partition (p0) for system_time all; select * from t1 partition (p0);
--sleep 2 --sleep 2
insert into t1 values (4); insert into t1 values (4);
delete from t1; delete from t1;
select * from t1 partition (p1) for system_time all; select * from t1 partition (p1);
# Subpartitions # Subpartitions
create or replace table t1 (x int) create or replace table t1 (x int)
@ -220,19 +221,19 @@ with system versioning
partition by system_time limit 1 partition by system_time limit 1
subpartition by key (x) subpartition by key (x)
subpartitions 2 ( subpartitions 2 (
partition p0 versioning, partition p0 history,
partition p1 versioning, partition p1 history,
partition pn as of current_timestamp); partition pn current);
insert into t1 (x) values (1), (2), (3); insert into t1 (x) values (1), (2), (3);
select * from t1 partition (pnsp0); select * from t1 partition (pnsp0);
select * from t1 partition (pnsp1); select * from t1 partition (pnsp1);
delete from t1; delete from t1;
select * from t1 partition (p0sp0) for system_time all; select * from t1 partition (p0sp0);
select * from t1 partition (p0sp1) for system_time all; select * from t1 partition (p0sp1);
select * from t1 partition (p1sp0) for system_time all; select * from t1 partition (p1sp0);
select * from t1 partition (p1sp1) for system_time all; select * from t1 partition (p1sp1);
create or replace table t1 (a bigint) create or replace table t1 (a bigint)
with system versioning with system versioning

View File

@ -1 +1 @@
--versioning-hide=implicit --system-versioning-hide=implicit

View File

@ -84,12 +84,21 @@ select t1.x as RJ1_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2
delete from t1; delete from t1;
delete from t2; delete from t2;
select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x #384
for system_time as of timestamp @t0; explain extended select * from (select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x)
select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x for system_time as of timestamp @t0 as t;
for system_time as of timestamp @t0; explain extended select * from (select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x)
select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x for system_time as of timestamp @t0 as t;
for system_time as of timestamp @t0; #383
explain extended select * from (select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x)
for system_time as of timestamp @t0 as t;
select * from (select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x)
for system_time as of timestamp @t0 as t;
select * from (select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x)
for system_time as of timestamp @t0 as t;
select * from (select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x)
for system_time as of timestamp @t0 as t;
drop table t1; drop table t1;
drop table t2; drop table t2;
@ -179,8 +188,9 @@ delete from t1 where x = 3;
insert into t2 values (1); insert into t2 values (1);
select * from t1, t2 for system_time all; select * from t1, t2 for system_time all;
--error ER_VERS_UNUSED_CLAUSE --error ER_VERS_SYSTEM_TIME_CLASH
select * from t1 for system_time all, t2 for system_time all for system_time all; select * from (select * from t1 for system_time all, t2 for system_time all)
for system_time all as t;
--echo # TRANSACTION/TIMESTAMP specifier in SYSTEM_TIME [MDEV-14645, Issue #396] --echo # TRANSACTION/TIMESTAMP specifier in SYSTEM_TIME [MDEV-14645, Issue #396]
create or replace table t1 (x int) with system versioning engine myisam; create or replace table t1 (x int) with system versioning engine myisam;

View File

@ -93,12 +93,12 @@ begin
delete from t1; delete from t1;
delete from t2; delete from t2;
select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x select IJ2_x1,y1,x2,y2 from (select t1.x as IJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 inner join t2 on t1.x = t2.x)
for system_time as of timestamp @t0; for system_time as of timestamp @t0 as t;
select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x select LJ2_x1,y1,x2,y2 from (select t1.x as LJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 left join t2 on t1.x = t2.x)
for system_time as of timestamp @t0; for system_time as of timestamp @t0 as t;
select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x select RJ2_x1,y1,x2,y2 from (select t1.x as RJ2_x1, t1.y as y1, t2.x as x2, t2.y as y2 from t1 right join t2 on t1.x = t2.x)
for system_time as of timestamp @t0; for system_time as of timestamp @t0 as t;
drop table t1; drop table t1;
drop table t2; drop table t2;
@ -192,8 +192,10 @@ delete from t1 where x = 3;
insert into t2 values (1); insert into t2 values (1);
select * from t1, t2 for system_time all; select * from t1, t2 for system_time all;
--error ER_VERS_UNUSED_CLAUSE --error ER_VERS_SYSTEM_TIME_CLASH
select * from t1 for system_time all, t2 for system_time all for system_time all; select * from (select * from t1 for system_time all, t2 for system_time all) for system_time all as t;
--error ER_PARSE_ERROR
select * from (t1 for system_time all join t2 for system_time all) for system_time all;
drop view v1; drop view v1;
drop table t1, t2; drop table t1, t2;

View File

@ -44,29 +44,30 @@ select * from emp e, dept d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id; and d.dept_id = e.dept_id;
select * from emp e, dept d select * from
emp for system_time from timestamp @ts_1 to timestamp @ts_2 e,
dept for system_time from timestamp @ts_1 to timestamp @ts_2 d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time from timestamp @ts_1 to timestamp @ts_2;
set statement system_versioning_asof=@ts_0 for
select * from emp e, dept d select * from emp e, dept d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time as of timestamp @ts_0;
set statement system_versioning_asof=@ts_1 for
select * from emp e, dept d select * from emp e, dept d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time as of timestamp @ts_1;
set statement system_versioning_asof=@ts_2 for
select * from emp e, dept d select * from emp e, dept d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time as of timestamp @ts_2;
set statement system_versioning_asof=@ts_3 for
select * from emp e, dept d select * from emp e, dept d
where d.dept_id = 10 where d.dept_id = 10
and d.dept_id = e.dept_id and d.dept_id = e.dept_id;
for system_time as of timestamp @ts_3;
drop table emp, dept; drop table emp, dept;

View File

@ -1 +1 @@
--versioning-hide=implicit --system-versioning-hide=implicit

View File

@ -2,83 +2,73 @@ create table t (a int) with system versioning;
insert into t values (1); insert into t values (1);
update t set a= 2; update t set a= 2;
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
select * from t; select * from t;
set versioning_asof_timestamp= '2031-1-1 0:0:0'; set system_versioning_asof= '2031-1-1 0:0:0';
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
select * from t; select * from t;
set versioning_asof_timestamp= '2011-1-1 0:0:0'; set system_versioning_asof= '2011-1-1 0:0:0';
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
select * from t; select * from t;
set versioning_asof_timestamp= ALL;
show variables like 'versioning_asof_timestamp';
select * from t;
create view vt as select * from t;
select * from t;
drop view vt;
select * from (select * from t) as tt;
# global # global
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global versioning_asof_timestamp= 'alley'; set global system_versioning_asof= 'alley';
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global versioning_asof_timestamp= null; set global system_versioning_asof= null;
--error ER_WRONG_TYPE_FOR_VAR --error ER_WRONG_TYPE_FOR_VAR
set global versioning_asof_timestamp= 1; set global system_versioning_asof= 1;
--error ER_WRONG_TYPE_FOR_VAR --error ER_WRONG_TYPE_FOR_VAR
set global versioning_asof_timestamp= 1.1; set global system_versioning_asof= 1.1;
# session # session
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set versioning_asof_timestamp= 'alley'; set system_versioning_asof= 'alley';
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set versioning_asof_timestamp= null; set system_versioning_asof= null;
--error ER_WRONG_TYPE_FOR_VAR --error ER_WRONG_TYPE_FOR_VAR
set versioning_asof_timestamp= 1; set system_versioning_asof= 1;
--error ER_WRONG_TYPE_FOR_VAR --error ER_WRONG_TYPE_FOR_VAR
set versioning_asof_timestamp= 1.1; set system_versioning_asof= 1.1;
# global # global
set global versioning_asof_timestamp= '1911-11-11 11:11:11.1111119'; set global system_versioning_asof= '1911-11-11 11:11:11.1111119';
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
set global versioning_asof_timestamp= '1900-01-01 00:00:00'; set global system_versioning_asof= '1900-01-01 00:00:00';
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
set global versioning_asof_timestamp= timestamp'1911-11-11 11:11:11.1111119'; set global system_versioning_asof= timestamp'1911-11-11 11:11:11.1111119';
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
set @ts= timestamp'1900-01-01 00:00:00'; set @ts= timestamp'1900-01-01 00:00:00';
set global versioning_asof_timestamp= @ts; set global system_versioning_asof= @ts;
show global variables like 'versioning_asof_timestamp'; show global variables like 'system_versioning_asof';
# session # session
set versioning_asof_timestamp= '1911-11-11 11:11:11.1111119'; set system_versioning_asof= '1911-11-11 11:11:11.1111119';
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
set versioning_asof_timestamp= '1900-01-01 00:00:00'; set system_versioning_asof= '1900-01-01 00:00:00';
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
set versioning_asof_timestamp= timestamp'1911-11-11 11:11:11.1111119'; set system_versioning_asof= timestamp'1911-11-11 11:11:11.1111119';
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
set @ts= timestamp'1900-01-01 00:00:00'; set @ts= timestamp'1900-01-01 00:00:00';
set versioning_asof_timestamp= @ts; set system_versioning_asof= @ts;
show variables like 'versioning_asof_timestamp'; show variables like 'system_versioning_asof';
set global versioning_asof_timestamp= CURRENT; set global system_versioning_asof= DEFAULT;
set versioning_asof_timestamp= CURRENT; set system_versioning_asof= DEFAULT;
show variables where variable_name = "versioning_hide"; show variables where variable_name = "system_versioning_hide";
select * from t for system_time all; select * from t for system_time all;
set versioning_hide= AUTO; set system_versioning_hide= AUTO;
select * from t; select * from t;
select * from t for system_time as of timestamp current_timestamp(6); select * from t for system_time as of timestamp current_timestamp(6);
--replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/ --replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/
@ -88,11 +78,11 @@ select * from t for system_time from '0-0-0' to current_timestamp(6);
--replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/ --replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/
select * from t for system_time between '0-0-0' and current_timestamp(6); select * from t for system_time between '0-0-0' and current_timestamp(6);
set versioning_hide= NEVER; set system_versioning_hide= NEVER;
--replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/ --replace_regex /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{6}/TIMESTAMP/
select * from t; select * from t;
set versioning_hide= FULL; set system_versioning_hide= FULL;
create or replace table t ( create or replace table t (
x int, x int,
st timestamp(6) generated always as row start, st timestamp(6) generated always as row start,
@ -108,4 +98,4 @@ select * from t;
select * from t for system_time all; select * from t for system_time all;
drop table t; drop table t;
set versioning_hide= IMPLICIT; set system_versioning_hide= IMPLICIT;

View File

@ -1,2 +1,2 @@
--versioning-hide=implicit --system-versioning-hide=implicit
--partition --partition

View File

@ -34,8 +34,8 @@ create or replace table t (a int)
with system versioning with system versioning
engine myisam engine myisam
partition by system_time ( partition by system_time (
partition p0 versioning, partition p0 history,
partition pn as of current_timestamp); partition pn current);
--error ER_NOT_ALLOWED_COMMAND --error ER_NOT_ALLOWED_COMMAND
truncate table t to system_time current_timestamp; truncate table t to system_time current_timestamp;

View File

@ -26,8 +26,8 @@ show grants;
truncate mysqltest.t to system_time now(); truncate mysqltest.t to system_time now();
connection root; connection root;
grant delete versioning rows on mysqltest.* to mysqltest_1@localhost; grant delete history on mysqltest.* to mysqltest_1@localhost;
grant delete versioning rows on mysqltest.t to mysqltest_1@localhost; grant delete history on mysqltest.t to mysqltest_1@localhost;
connection user1; connection user1;
show grants; show grants;

View File

@ -1 +1 @@
--versioning-hide=implicit --system-versioning-hide=implicit

View File

@ -23,7 +23,7 @@ set sql_mode='';
set @orig_storage_engine=@@storage_engine; set @orig_storage_engine=@@storage_engine;
set storage_engine=myisam; set storage_engine=myisam;
set versioning_alter_history=keep; set system_versioning_alter_history=keep;
set @have_innodb= (select count(engine) from information_schema.engines where engine='INNODB' and support != 'NO'); set @have_innodb= (select count(engine) from information_schema.engines where engine='INNODB' and support != 'NO');
SET @innodb_or_myisam=IF(@have_innodb <> 0, 'InnoDB', 'MyISAM'); SET @innodb_or_myisam=IF(@have_innodb <> 0, 'InnoDB', 'MyISAM');

View File

@ -4395,7 +4395,7 @@ int ha_partition::update_row(const uchar *old_data, const uchar *new_data)
uint sub_factor= m_part_info->num_subparts ? m_part_info->num_subparts : 1; uint sub_factor= m_part_info->num_subparts ? m_part_info->num_subparts : 1;
DBUG_ASSERT(m_tot_parts == m_part_info->num_parts * sub_factor); DBUG_ASSERT(m_tot_parts == m_part_info->num_parts * sub_factor);
uint lpart_id= new_part_id / sub_factor; uint lpart_id= new_part_id / sub_factor;
// lpart_id is VERSIONING partition because new_part_id != old_part_id // lpart_id is HISTORY partition because new_part_id != old_part_id
m_part_info->vers_update_stats(thd, lpart_id); m_part_info->vers_update_stats(thd, lpart_id);
} }

View File

@ -3071,8 +3071,8 @@ int handler::update_auto_increment()
table->next_number_field->set_null(); table->next_number_field->set_null();
DBUG_RETURN(0); DBUG_RETURN(0);
} }
table->next_number_field->set_notnull();
} }
table->next_number_field->set_notnull();
} }
/* /*

View File

@ -274,6 +274,7 @@ static SYMBOL symbols[] = {
{ "HELP", SYM(HELP_SYM)}, { "HELP", SYM(HELP_SYM)},
{ "HIGH_PRIORITY", SYM(HIGH_PRIORITY)}, { "HIGH_PRIORITY", SYM(HIGH_PRIORITY)},
{ "INVISIBLE", SYM(INVISIBLE_SYM)}, { "INVISIBLE", SYM(INVISIBLE_SYM)},
{ "HISTORY", SYM(HISTORY_SYM)},
{ "HOST", SYM(HOST_SYM)}, { "HOST", SYM(HOST_SYM)},
{ "HOSTS", SYM(HOSTS_SYM)}, { "HOSTS", SYM(HOSTS_SYM)},
{ "HOUR", SYM(HOUR_SYM)}, { "HOUR", SYM(HOUR_SYM)},

View File

@ -156,8 +156,8 @@ public:
enum elem_type enum elem_type
{ {
CONVENTIONAL= 0, CONVENTIONAL= 0,
AS_OF_NOW, CURRENT,
VERSIONING HISTORY
}; };
List<partition_element> subpartitions; List<partition_element> subpartitions;

View File

@ -898,6 +898,7 @@ partition_info::vers_part_rotate(THD * thd)
Sql_condition::WARN_LEVEL_WARN, Sql_condition::WARN_LEVEL_WARN,
WARN_VERS_PART_FULL, WARN_VERS_PART_FULL,
ER_THD(thd, WARN_VERS_PART_FULL), ER_THD(thd, WARN_VERS_PART_FULL),
table->s->db.str, table->s->table_name.str,
vers_info->hist_part->partition_name); vers_info->hist_part->partition_name);
return vers_info->hist_part; return vers_info->hist_part;
} }
@ -910,6 +911,7 @@ partition_info::vers_part_rotate(THD * thd)
Sql_condition::WARN_LEVEL_NOTE, Sql_condition::WARN_LEVEL_NOTE,
WARN_VERS_PART_ROTATION, WARN_VERS_PART_ROTATION,
ER_THD(thd, WARN_VERS_PART_ROTATION), ER_THD(thd, WARN_VERS_PART_ROTATION),
table->s->db.str, table->s->table_name.str,
old_part_name, old_part_name,
vers_info->hist_part->partition_name); vers_info->hist_part->partition_name);
@ -925,7 +927,7 @@ bool partition_info::vers_set_expression(THD *thd, partition_element *el, MYSQL_
for (uint i= 0; i < num_columns; ++i) for (uint i= 0; i < num_columns; ++i)
{ {
part_column_list_val *col_val= add_column_value(thd); part_column_list_val *col_val= add_column_value(thd);
if (el->type() == partition_element::AS_OF_NOW) if (el->type() == partition_element::CURRENT)
{ {
col_val->max_value= true; col_val->max_value= true;
col_val->item_expression= NULL; col_val->item_expression= NULL;
@ -989,20 +991,20 @@ bool partition_info::vers_setup_expression(THD * thd, uint32 alter_add)
if (alter_add) if (alter_add)
{ {
/* Non-empty historical partitions are left as is. */ /* Non-empty historical partitions are left as is. */
if (el->type() == partition_element::VERSIONING && !el->empty) if (el->type() == partition_element::HISTORY && !el->empty)
{ {
++id; ++id;
continue; continue;
} }
/* Newly added element is inserted before AS_OF_NOW. */ /* Newly added element is inserted before AS_OF_NOW. */
if (el->id == UINT32_MAX || el->type() == partition_element::AS_OF_NOW) if (el->id == UINT32_MAX || el->type() == partition_element::CURRENT)
{ {
DBUG_ASSERT(table && table->s); DBUG_ASSERT(table && table->s);
Vers_min_max_stats *stat_trx_end= new (&table->s->mem_root) Vers_min_max_stats *stat_trx_end= new (&table->s->mem_root)
Vers_min_max_stats(&table->s->vers_end_field()->field_name, table->s); Vers_min_max_stats(&table->s->vers_end_field()->field_name, table->s);
table->s->stat_trx[id * num_columns + STAT_TRX_END]= stat_trx_end; table->s->stat_trx[id * num_columns + STAT_TRX_END]= stat_trx_end;
el->id= id++; el->id= id++;
if (el->type() == partition_element::AS_OF_NOW) if (el->type() == partition_element::CURRENT)
break; break;
goto set_expression; goto set_expression;
} }
@ -1035,7 +1037,7 @@ bool partition_info::vers_scan_min_max(THD *thd, partition_element *part)
uint32 part_id= part->id * sub_factor; uint32 part_id= part->id * sub_factor;
uint32 part_id_end= part_id + sub_factor; uint32 part_id_end= part_id + sub_factor;
DBUG_ASSERT(part->empty); DBUG_ASSERT(part->empty);
DBUG_ASSERT(part->type() == partition_element::VERSIONING); DBUG_ASSERT(part->type() == partition_element::HISTORY);
DBUG_ASSERT(table->s->stat_trx); DBUG_ASSERT(table->s->stat_trx);
for (; part_id < part_id_end; ++part_id) for (; part_id < part_id_end; ++part_id)
{ {
@ -1196,7 +1198,7 @@ bool partition_info::vers_setup_stats(THD * thd, bool is_create_table_ind)
partition_element *el= NULL, *prev; partition_element *el= NULL, *prev;
while ((prev= el, el= it++)) while ((prev= el, el= it++))
{ {
if (el->type() == partition_element::VERSIONING && dont_stat) if (el->type() == partition_element::HISTORY && dont_stat)
{ {
if (el->id == table->s->hist_part_id) if (el->id == table->s->hist_part_id)
{ {
@ -1214,7 +1216,7 @@ bool partition_info::vers_setup_stats(THD * thd, bool is_create_table_ind)
if (!is_create_table_ind) if (!is_create_table_ind)
{ {
if (el->type() == partition_element::AS_OF_NOW) if (el->type() == partition_element::CURRENT)
{ {
uchar buf[8]; uchar buf[8];
Field_timestampf fld(buf, NULL, 0, Field::NONE, &table->vers_end_field()->field_name, NULL, 6); Field_timestampf fld(buf, NULL, 0, Field::NONE, &table->vers_end_field()->field_name, NULL, 6);
@ -1235,10 +1237,10 @@ bool partition_info::vers_setup_stats(THD * thd, bool is_create_table_ind)
} }
} }
if (el->type() == partition_element::AS_OF_NOW) if (el->type() == partition_element::CURRENT)
break; break;
DBUG_ASSERT(el->type() == partition_element::VERSIONING); DBUG_ASSERT(el->type() == partition_element::HISTORY);
if (vers_info->hist_part) if (vers_info->hist_part)
{ {
@ -2083,13 +2085,13 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type,
} }
if (part_type == VERSIONING_PARTITION) if (part_type == VERSIONING_PARTITION)
{ {
if (part_elem->type() == partition_element::VERSIONING) if (part_elem->type() == partition_element::HISTORY)
{ {
hist_parts++; hist_parts++;
} }
else else
{ {
DBUG_ASSERT(part_elem->type() == partition_element::AS_OF_NOW); DBUG_ASSERT(part_elem->type() == partition_element::CURRENT);
now_parts++; now_parts++;
} }
} }
@ -2139,7 +2141,7 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type,
Sql_condition::WARN_LEVEL_WARN, Sql_condition::WARN_LEVEL_WARN,
WARN_VERS_PARAMETERS, WARN_VERS_PARAMETERS,
ER_THD(thd, WARN_VERS_PARAMETERS), ER_THD(thd, WARN_VERS_PARAMETERS),
"no rotation condition for multiple `VERSIONING` partitions."); "no rotation condition for multiple HISTORY partitions.");
} }
} }
if (now_parts > 1) if (now_parts > 1)

View File

@ -58,11 +58,11 @@ struct Vers_part_info : public Sql_alloc
if (now_part) if (now_part)
{ {
DBUG_ASSERT(now_part->id != UINT32_MAX); DBUG_ASSERT(now_part->id != UINT32_MAX);
DBUG_ASSERT(now_part->type() == partition_element::AS_OF_NOW); DBUG_ASSERT(now_part->type() == partition_element::CURRENT);
DBUG_ASSERT(!fully || (bool) hist_part); DBUG_ASSERT(!fully || (bool) hist_part);
DBUG_ASSERT(!hist_part || ( DBUG_ASSERT(!hist_part || (
hist_part->id != UINT32_MAX && hist_part->id != UINT32_MAX &&
hist_part->type() == partition_element::VERSIONING)); hist_part->type() == partition_element::HISTORY));
return true; return true;
} }
return false; return false;
@ -436,7 +436,7 @@ public:
while ((el= it++)) while ((el= it++))
{ {
DBUG_ASSERT(el->type() != partition_element::CONVENTIONAL); DBUG_ASSERT(el->type() != partition_element::CONVENTIONAL);
if (el->type() == partition_element::VERSIONING && if (el->type() == partition_element::HISTORY &&
el->id == table->s->hist_part_id) el->id == table->s->hist_part_id)
{ {
vers_info->hist_part= el; vers_info->hist_part= el;
@ -508,7 +508,7 @@ public:
{ {
DBUG_ASSERT(vers_info && vers_info->initialized()); DBUG_ASSERT(vers_info && vers_info->initialized());
DBUG_ASSERT(table && table->s); DBUG_ASSERT(table && table->s);
DBUG_ASSERT(el && el->type() == partition_element::VERSIONING); DBUG_ASSERT(el && el->type() == partition_element::HISTORY);
bool updated; bool updated;
mysql_rwlock_wrlock(&table->s->LOCK_stat_serial); mysql_rwlock_wrlock(&table->s->LOCK_stat_serial);
el->empty= false; el->empty= false;

View File

@ -7837,13 +7837,13 @@ ER_PARTITION_WRONG_TYPE
eng "Wrong partition type, expected type: %`s" eng "Wrong partition type, expected type: %`s"
WARN_VERS_PART_FULL WARN_VERS_PART_FULL
eng "Using full partition %`s, need more VERSIONING partitions!" eng "Versioned table %`s.%`s: partition %`s is full, add more HISTORY partitions"
WARN_VERS_PARAMETERS WARN_VERS_PARAMETERS
eng "Maybe missing parameters: %s" eng "Maybe missing parameters: %s"
WARN_VERS_PART_ROTATION WARN_VERS_PART_ROTATION
eng "Switching from partition %`s to %`s" eng "Versioned table %`s.%`s: switching from partition %`s to %`s"
WARN_VERS_TRX_MISSING WARN_VERS_TRX_MISSING
eng "VTQ missing transaction ID %lu" eng "VTQ missing transaction ID %lu"
@ -7852,7 +7852,7 @@ WARN_VERS_PART_NON_HISTORICAL
eng "Partition %`s contains non-historical data" eng "Partition %`s contains non-historical data"
ER_VERS_ALTER_NOT_ALLOWED ER_VERS_ALTER_NOT_ALLOWED
eng "Not allowed for versioned %`s.%`s. Change `versioning_alter_history` to proceed with ALTER." eng "Not allowed for versioned %`s.%`s. Change @@system_versioning_alter_history to proceed with ALTER."
ER_VERS_ALTER_ENGINE_PROHIBITED ER_VERS_ALTER_ENGINE_PROHIBITED
eng "Not allowed for versioned %`s.%`s. Change to/from native versioning engine is prohibited." eng "Not allowed for versioned %`s.%`s. Change to/from native versioning engine is prohibited."
@ -7897,7 +7897,7 @@ ER_PART_WRONG_VALUE
eng "Wrong parameters for partitioned %`s: wrong value for '%s'" eng "Wrong parameters for partitioned %`s: wrong value for '%s'"
ER_VERS_WRONG_PARTS ER_VERS_WRONG_PARTS
eng "Wrong partitions consistency for %`s: must have at least one 'VERSIONING' and exactly one last 'AS OF NOW'" eng "Wrong partitions consistency for %`s: must have at least one HISTORY and exactly one last CURRENT"
ER_VERS_HISTORY_LOCK ER_VERS_HISTORY_LOCK
eng "Versioned SELECT write-locking of history rows" eng "Versioned SELECT write-locking of history rows"

View File

@ -2019,7 +2019,7 @@ static bool acl_load(THD *thd, const Grant_tables& tables)
user.access|= TRIGGER_ACL; user.access|= TRIGGER_ACL;
if (user_table.num_fields() <= 46 && (user.access & DELETE_ACL)) if (user_table.num_fields() <= 46 && (user.access & DELETE_ACL))
user.access|= DELETE_VERSIONING_ROWS_ACL; user.access|= DELETE_HISTORY_ACL;
user.sort= get_sort(2, user.host.hostname, user.user.str); user.sort= get_sort(2, user.host.hostname, user.user.str);
user.hostname_length= safe_strlen(user.host.hostname); user.hostname_length= safe_strlen(user.host.hostname);

View File

@ -49,7 +49,7 @@
#define EVENT_ACL (1UL << 26) #define EVENT_ACL (1UL << 26)
#define TRIGGER_ACL (1UL << 27) #define TRIGGER_ACL (1UL << 27)
#define CREATE_TABLESPACE_ACL (1UL << 28) #define CREATE_TABLESPACE_ACL (1UL << 28)
#define DELETE_VERSIONING_ROWS_ACL (1UL << 29) #define DELETE_HISTORY_ACL (1UL << 29)
/* /*
don't forget to update don't forget to update
1. static struct show_privileges_st sys_privileges[] 1. static struct show_privileges_st sys_privileges[]
@ -64,12 +64,12 @@
GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_TMP_ACL | \ GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_TMP_ACL | \
LOCK_TABLES_ACL | EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | \ LOCK_TABLES_ACL | EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | \
CREATE_PROC_ACL | ALTER_PROC_ACL | EVENT_ACL | TRIGGER_ACL | \ CREATE_PROC_ACL | ALTER_PROC_ACL | EVENT_ACL | TRIGGER_ACL | \
DELETE_VERSIONING_ROWS_ACL) DELETE_HISTORY_ACL)
#define TABLE_ACLS \ #define TABLE_ACLS \
(SELECT_ACL | INSERT_ACL | UPDATE_ACL | DELETE_ACL | CREATE_ACL | DROP_ACL | \ (SELECT_ACL | INSERT_ACL | UPDATE_ACL | DELETE_ACL | CREATE_ACL | DROP_ACL | \
GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_VIEW_ACL | \ GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_VIEW_ACL | \
SHOW_VIEW_ACL | TRIGGER_ACL | DELETE_VERSIONING_ROWS_ACL) SHOW_VIEW_ACL | TRIGGER_ACL | DELETE_HISTORY_ACL)
#define COL_ACLS \ #define COL_ACLS \
(SELECT_ACL | INSERT_ACL | UPDATE_ACL | REFERENCES_ACL) (SELECT_ACL | INSERT_ACL | UPDATE_ACL | REFERENCES_ACL)
@ -87,7 +87,7 @@
CREATE_TMP_ACL | LOCK_TABLES_ACL | REPL_SLAVE_ACL | REPL_CLIENT_ACL | \ CREATE_TMP_ACL | LOCK_TABLES_ACL | REPL_SLAVE_ACL | REPL_CLIENT_ACL | \
EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | CREATE_PROC_ACL | \ EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | CREATE_PROC_ACL | \
ALTER_PROC_ACL | CREATE_USER_ACL | EVENT_ACL | TRIGGER_ACL | \ ALTER_PROC_ACL | CREATE_USER_ACL | EVENT_ACL | TRIGGER_ACL | \
CREATE_TABLESPACE_ACL | DELETE_VERSIONING_ROWS_ACL) CREATE_TABLESPACE_ACL | DELETE_HISTORY_ACL)
#define DEFAULT_CREATE_PROC_ACLS \ #define DEFAULT_CREATE_PROC_ACLS \
(ALTER_PROC_ACL | EXECUTE_ACL) (ALTER_PROC_ACL | EXECUTE_ACL)
@ -119,7 +119,7 @@
CREATE_PROC_ACL | ALTER_PROC_ACL ) CREATE_PROC_ACL | ALTER_PROC_ACL )
#define DB_CHUNK4 (EXECUTE_ACL) #define DB_CHUNK4 (EXECUTE_ACL)
#define DB_CHUNK5 (EVENT_ACL | TRIGGER_ACL) #define DB_CHUNK5 (EVENT_ACL | TRIGGER_ACL)
#define DB_CHUNK6 (DELETE_VERSIONING_ROWS_ACL) #define DB_CHUNK6 (DELETE_HISTORY_ACL)
#define fix_rights_for_db(A) (((A) & DB_CHUNK0) | \ #define fix_rights_for_db(A) (((A) & DB_CHUNK0) | \
(((A) << 4) & DB_CHUNK1) | \ (((A) << 4) & DB_CHUNK1) | \
@ -139,7 +139,7 @@
#define TBL_CHUNK1 DB_CHUNK1 #define TBL_CHUNK1 DB_CHUNK1
#define TBL_CHUNK2 (CREATE_VIEW_ACL | SHOW_VIEW_ACL) #define TBL_CHUNK2 (CREATE_VIEW_ACL | SHOW_VIEW_ACL)
#define TBL_CHUNK3 TRIGGER_ACL #define TBL_CHUNK3 TRIGGER_ACL
#define TBL_CHUNK4 (DELETE_VERSIONING_ROWS_ACL) #define TBL_CHUNK4 (DELETE_HISTORY_ACL)
#define fix_rights_for_table(A) (((A) & TBL_CHUNK0) | \ #define fix_rights_for_table(A) (((A) & TBL_CHUNK0) | \
(((A) << 4) & TBL_CHUNK1) | \ (((A) << 4) & TBL_CHUNK1) | \
(((A) << 11) & TBL_CHUNK2) | \ (((A) << 11) & TBL_CHUNK2) | \

View File

@ -2220,11 +2220,11 @@ static int add_partition_values(String *str, partition_info *part_info,
{ {
switch (p_elem->type()) switch (p_elem->type())
{ {
case partition_element::AS_OF_NOW: case partition_element::CURRENT:
err+= str->append(STRING_WITH_LEN(" AS OF CURRENT_TIMESTAMP")); err+= str->append(STRING_WITH_LEN(" CURRENT"));
break; break;
case partition_element::VERSIONING: case partition_element::HISTORY:
err+= str->append(STRING_WITH_LEN(" VERSIONING")); err+= str->append(STRING_WITH_LEN(" HISTORY"));
break; break;
default: default:
DBUG_ASSERT(0 && "wrong p_elem->type"); DBUG_ASSERT(0 && "wrong p_elem->type");
@ -5000,7 +5000,7 @@ that are reorganised.
partition_element *el; partition_element *el;
while ((el= it++)) while ((el= it++))
{ {
if (el->type() == partition_element::AS_OF_NOW) if (el->type() == partition_element::CURRENT)
{ {
DBUG_ASSERT(tab_part_info->vers_info && el == tab_part_info->vers_info->now_part); DBUG_ASSERT(tab_part_info->vers_info && el == tab_part_info->vers_info->now_part);
it.remove(); it.remove();
@ -5094,7 +5094,7 @@ that are reorganised.
alter_info->partition_names)) alter_info->partition_names))
{ {
if (tab_part_info->part_type == VERSIONING_PARTITION && if (tab_part_info->part_type == VERSIONING_PARTITION &&
part_elem->type() == partition_element::AS_OF_NOW) part_elem->type() == partition_element::CURRENT)
{ {
DBUG_ASSERT(table && table->s && table->s->table_name.str); DBUG_ASSERT(table && table->s && table->s->table_name.str);
my_error(ER_VERS_WRONG_PARTS, MYF(0), table->s->table_name.str); my_error(ER_VERS_WRONG_PARTS, MYF(0), table->s->table_name.str);

View File

@ -827,6 +827,27 @@ int SELECT_LEX::vers_setup_conds(THD *thd, TABLE_LIST *tables, COND **where_expr
vers_select_conds_t &vers_conditions= table->vers_conditions; vers_select_conds_t &vers_conditions= table->vers_conditions;
#ifdef WITH_PARTITION_STORAGE_ENGINE
/*
if the history is stored in partitions, then partitions
themselves are not versioned
*/
if (table->partition_names && table->table->part_info->vers_info)
{
if (vers_conditions)
{
#define PART_VERS_ERR_MSG "%s PARTITION (%s)"
char buf[NAME_LEN*2 + sizeof(PART_VERS_ERR_MSG)];
my_snprintf(buf, sizeof(buf), PART_VERS_ERR_MSG, table->alias,
table->partition_names->head()->c_ptr());
my_error(ER_VERSIONING_REQUIRED, MYF(0), buf);
DBUG_RETURN(-1);
}
else
vers_conditions.init(FOR_SYSTEM_TIME_ALL);
}
#endif
if (outer_table && table != outer_table) // inner table may be outer in recursive CTE if (outer_table && table != outer_table) // inner table may be outer in recursive CTE
{ {
if (vers_conditions) if (vers_conditions)

View File

@ -498,7 +498,7 @@ bool Sql_cmd_truncate_table::execute(THD *thd)
if (table->vers_conditions) if (table->vers_conditions)
{ {
if (check_one_table_access(thd, DELETE_VERSIONING_ROWS_ACL, table)) if (check_one_table_access(thd, DELETE_HISTORY_ACL, table))
DBUG_RETURN(res); DBUG_RETURN(res);
DBUG_RETURN(mysql_delete(thd, table, NULL, NULL, -1, 0, NULL)); DBUG_RETURN(mysql_delete(thd, table, NULL, NULL, -1, 0, NULL));
} }

View File

@ -740,12 +740,8 @@ bool LEX::set_bincmp(CHARSET_INFO *cs, bool bin)
} while(0) } while(0)
inline void vers_select_conds_t::init( void vers_select_conds_t::init(vers_range_type_t t, vers_range_unit_t u_start,
vers_range_type_t t, Item *s, vers_range_unit_t u_end, Item *e)
vers_range_unit_t u_start= UNIT_AUTO,
Item * s= NULL,
vers_range_unit_t u_end= UNIT_AUTO,
Item * e= NULL)
{ {
type= t; type= t;
unit_start= u_start; unit_start= u_start;
@ -755,7 +751,7 @@ inline void vers_select_conds_t::init(
from_query= false; from_query= false;
} }
inline Item *vers_select_conds_t::fix_dec(Item *item) Item *vers_select_conds_t::fix_dec(Item *item)
{ {
if (item && item->decimals == 0 && item->type() == Item::FUNC_ITEM && if (item && item->decimals == 0 && item->type() == Item::FUNC_ITEM &&
((Item_func*)item)->functype() == Item_func::NOW_FUNC) ((Item_func*)item)->functype() == Item_func::NOW_FUNC)
@ -896,10 +892,10 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%parse-param { THD *thd } %parse-param { THD *thd }
%lex-param { THD *thd } %lex-param { THD *thd }
/* /*
Currently there are 125 shift/reduce conflicts. Currently there are 122 shift/reduce conflicts.
We should not introduce new conflicts any more. We should not introduce new conflicts any more.
*/ */
%expect 125 %expect 122
/* /*
Comments for TOKENS. Comments for TOKENS.
@ -1161,6 +1157,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token HEX_STRING %token HEX_STRING
%token HIGH_PRIORITY %token HIGH_PRIORITY
%token INVISIBLE_SYM %token INVISIBLE_SYM
%token HISTORY_SYM /* MYSQL */
%token HOST_SYM %token HOST_SYM
%token HOSTS_SYM %token HOSTS_SYM
%token HOUR_MICROSECOND_SYM %token HOUR_MICROSECOND_SYM
@ -5465,7 +5462,7 @@ opt_part_values:
part_info->part_type= LIST_PARTITION; part_info->part_type= LIST_PARTITION;
} }
part_values_in {} part_values_in {}
| AS OF_SYM NOW_SYM | CURRENT_SYM
{ {
LEX *lex= Lex; LEX *lex= Lex;
partition_info *part_info= lex->part_info; partition_info *part_info= lex->part_info;
@ -5484,7 +5481,7 @@ opt_part_values:
my_yyabort_error((ER_VERS_WRONG_PARTS, MYF(0), my_yyabort_error((ER_VERS_WRONG_PARTS, MYF(0),
Lex->create_last_non_select_table->table_name)); Lex->create_last_non_select_table->table_name));
} }
elem->type(partition_element::AS_OF_NOW); elem->type(partition_element::CURRENT);
DBUG_ASSERT(part_info->vers_info); DBUG_ASSERT(part_info->vers_info);
part_info->vers_info->now_part= elem; part_info->vers_info->now_part= elem;
if (part_info->init_column_part(thd)) if (part_info->init_column_part(thd))
@ -5492,7 +5489,7 @@ opt_part_values:
MYSQL_YYABORT; MYSQL_YYABORT;
} }
} }
| VERSIONING_SYM | HISTORY_SYM
{ {
LEX *lex= Lex; LEX *lex= Lex;
partition_info *part_info= lex->part_info; partition_info *part_info= lex->part_info;
@ -5515,7 +5512,7 @@ opt_part_values:
DBUG_ASSERT(Lex->create_last_non_select_table->table_name); DBUG_ASSERT(Lex->create_last_non_select_table->table_name);
my_yyabort_error((ER_VERS_WRONG_PARTS, MYF(0), Lex->create_last_non_select_table->table_name)); my_yyabort_error((ER_VERS_WRONG_PARTS, MYF(0), Lex->create_last_non_select_table->table_name));
} }
elem->type(partition_element::VERSIONING); elem->type(partition_element::HISTORY);
if (part_info->init_column_part(thd)) if (part_info->init_column_part(thd))
{ {
MYSQL_YYABORT; MYSQL_YYABORT;
@ -9135,7 +9132,6 @@ table_expression:
opt_group_clause opt_group_clause
opt_having_clause opt_having_clause
opt_window_clause opt_window_clause
opt_system_time_clause
; ;
opt_table_expression: opt_table_expression:
@ -9185,32 +9181,6 @@ opt_trans_or_timestamp:
} }
; ;
opt_system_time_clause:
/* empty */
{}
| FOR_SYSTEM_TIME_SYM system_time_expr
{
DBUG_ASSERT(Select);
int used= 0;
if (Lex->vers_conditions)
{
for (TABLE_LIST *table= Select->table_list.first; table; table= table->next_local)
{
if (!table->vers_conditions)
{
table->vers_conditions= Lex->vers_conditions;
table->vers_conditions.from_query= true;
used++;
}
}
if (!used)
{
my_yyabort_error((ER_VERS_UNUSED_CLAUSE, MYF(0), "SYSTEM_TIME"));
}
}
}
;
opt_for_system_time_clause: opt_for_system_time_clause:
/* empty */ /* empty */
{ {
@ -11860,7 +11830,10 @@ table_primary_derived:
!$$->derived->first_select()->next_select()) !$$->derived->first_select()->next_select())
$$->select_lex->add_where_field($$->derived->first_select()); $$->select_lex->add_where_field($$->derived->first_select());
if ($5) if ($5)
{
MYSQL_YYABORT_UNLESS(!$3);
$$->vers_conditions= Lex->vers_conditions; $$->vers_conditions= Lex->vers_conditions;
}
} }
/* Represents derived table with WITH clause */ /* Represents derived table with WITH clause */
| '(' get_select_lex subselect_start | '(' get_select_lex subselect_start
@ -15528,6 +15501,7 @@ keyword_sp_not_data_type:
| HASH_SYM {} | HASH_SYM {}
| HARD_SYM {} | HARD_SYM {}
| INVISIBLE_SYM {} | INVISIBLE_SYM {}
| HISTORY_SYM {}
| HOSTS_SYM {} | HOSTS_SYM {}
| HOUR_SYM {} | HOUR_SYM {}
| ID_SYM {} | ID_SYM {}
@ -16558,7 +16532,7 @@ object_privilege:
| EVENT_SYM { Lex->grant |= EVENT_ACL;} | EVENT_SYM { Lex->grant |= EVENT_ACL;}
| TRIGGER_SYM { Lex->grant |= TRIGGER_ACL; } | TRIGGER_SYM { Lex->grant |= TRIGGER_ACL; }
| CREATE TABLESPACE { Lex->grant |= CREATE_TABLESPACE_ACL; } | CREATE TABLESPACE { Lex->grant |= CREATE_TABLESPACE_ACL; }
| DELETE_SYM VERSIONING_SYM ROWS_SYM { Lex->grant |= DELETE_VERSIONING_ROWS_ACL; } | DELETE_SYM HISTORY_SYM { Lex->grant |= DELETE_HISTORY_ACL; }
; ;
opt_and: opt_and:

View File

@ -387,19 +387,19 @@ static Sys_var_charptr Sys_my_bind_addr(
READ_ONLY GLOBAL_VAR(my_bind_addr_str), CMD_LINE(REQUIRED_ARG), READ_ONLY GLOBAL_VAR(my_bind_addr_str), CMD_LINE(REQUIRED_ARG),
IN_FS_CHARSET, DEFAULT(0)); IN_FS_CHARSET, DEFAULT(0));
const char *Sys_var_vers_asof::asof_keywords[]= {"CURRENT", "ALL", NULL}; const char *Sys_var_vers_asof::asof_keywords[]= {"DEFAULT", NULL};
static Sys_var_vers_asof Sys_vers_asof_timestamp( static Sys_var_vers_asof Sys_vers_asof_timestamp(
"versioning_asof_timestamp", "Default AS OF value for versioned queries", "system_versioning_asof", "Default value for the FOR SYSTEM_TIME AS OF clause",
SESSION_VAR(vers_asof_timestamp.type), NO_CMD_LINE, SESSION_VAR(vers_asof_timestamp.type), NO_CMD_LINE,
Sys_var_vers_asof::asof_keywords, DEFAULT(FOR_SYSTEM_TIME_UNSPECIFIED)); Sys_var_vers_asof::asof_keywords, DEFAULT(FOR_SYSTEM_TIME_UNSPECIFIED));
static Sys_var_mybool Sys_vers_force( static Sys_var_mybool Sys_vers_force(
"versioning_force", "Force system versioning for all created tables", "system_versioning_force", "Force system versioning for all created tables",
SESSION_VAR(vers_force), CMD_LINE(OPT_ARG), DEFAULT(FALSE)); SESSION_VAR(vers_force), CMD_LINE(OPT_ARG), DEFAULT(FALSE));
static const char *vers_hide_keywords[]= {"AUTO", "IMPLICIT", "FULL", "NEVER", NULL}; static const char *vers_hide_keywords[]= {"AUTO", "IMPLICIT", "FULL", "NEVER", NULL};
static Sys_var_enum Sys_vers_hide( static Sys_var_enum Sys_vers_hide(
"versioning_hide", "Hide system versioning from being displayed in table info. " "system_versioning_hide", "Hide system versioning from being displayed in table info. "
"AUTO: hide implicit system fields only in non-versioned and AS OF queries; " "AUTO: hide implicit system fields only in non-versioned and AS OF queries; "
"IMPLICIT: hide implicit system fields in all queries; " "IMPLICIT: hide implicit system fields in all queries; "
"FULL: hide any system fields in all queries and hide versioning info in SHOW commands; " "FULL: hide any system fields in all queries and hide versioning info in SHOW commands; "
@ -408,14 +408,14 @@ static Sys_var_enum Sys_vers_hide(
vers_hide_keywords, DEFAULT(VERS_HIDE_AUTO)); vers_hide_keywords, DEFAULT(VERS_HIDE_AUTO));
static Sys_var_mybool Sys_vers_innodb_algorithm_simple( static Sys_var_mybool Sys_vers_innodb_algorithm_simple(
"versioning_innodb_algorithm_simple", "system_versioning_innodb_algorithm_simple",
"Use simple algorithm of timestamp handling in InnoDB instead of TRX_SEES", "Use simple algorithm of timestamp handling in InnoDB instead of TRX_SEES",
SESSION_VAR(vers_innodb_algorithm_simple), CMD_LINE(OPT_ARG), SESSION_VAR(vers_innodb_algorithm_simple), CMD_LINE(OPT_ARG),
DEFAULT(TRUE)); DEFAULT(TRUE));
static const char *vers_alter_history_keywords[]= {"ERROR", "KEEP",/* "SURVIVE", "DROP",*/ NULL}; static const char *vers_alter_history_keywords[]= {"ERROR", "KEEP",/* "SURVIVE", "DROP",*/ NULL};
static Sys_var_enum Sys_vers_alter_history( static Sys_var_enum Sys_vers_alter_history(
"versioning_alter_history", "Versioning ALTER TABLE mode. " "system_versioning_alter_history", "Versioning ALTER TABLE mode. "
"ERROR: Fail ALTER with error; " /* TODO: fail only when history non-empty */ "ERROR: Fail ALTER with error; " /* TODO: fail only when history non-empty */
"KEEP: Keep historical system rows and subject them to ALTER; " "KEEP: Keep historical system rows and subject them to ALTER; "
/*"SURVIVE: Keep historical system rows intact; " /*"SURVIVE: Keep historical system rows intact; "

View File

@ -1886,8 +1886,9 @@ struct vers_select_conds_t
Item *fix_dec(Item *item); Item *fix_dec(Item *item);
void init( vers_range_type_t t, vers_range_unit_t u_start, void init(vers_range_type_t t, vers_range_unit_t u_start= UNIT_AUTO,
Item * s, vers_range_unit_t u_end, Item * e); Item * s= NULL, vers_range_unit_t u_end= UNIT_AUTO,
Item * e= NULL);
bool init_from_sysvar(THD *thd); bool init_from_sysvar(THD *thd);