--source suite/versioning/engines.inc --source suite/versioning/common.inc --disable_warnings drop table if exists t1; --enable_warnings delimiter ~~; create function if not exists non_default_engine() returns varchar(255) deterministic begin if default_engine() = 'innodb' then return 'myisam'; end if; return 'innodb'; end~~ delimiter ;~~ --let $sys_datatype= `select sys_datatype()` --let $default_engine= `select default_engine()` --let $non_default_engine= `select non_default_engine()` --replace_result "bigint unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE eval create table t1 ( x1 int unsigned, Sys_start $sys_datatype generated always as row start comment 'start', Sys_end $sys_datatype generated always as row end comment 'end', period for system_time (Sys_start, Sys_end) ) with system versioning; --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; --echo # Implicit fields test create or replace table t1 ( x2 int unsigned ) with system versioning; --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; --replace_result "bigint unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE --error ER_VERS_PERIOD_COLUMNS eval create or replace table t1 ( x3 int unsigned, Sys_start $sys_datatype generated always as row start, Sys_start2 $sys_datatype generated always as row start, Sys_end $sys_datatype generated always as row end, period for system_time (Sys_start, Sys_end) ) with system versioning; --replace_result "bigint unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE --error ER_VERS_PERIOD_COLUMNS eval create or replace table t1 ( x4 int unsigned, Sys_start $sys_datatype generated always as row start, Sys_end2 $sys_datatype generated always as row end, period for system_time (Sys_start, Sys_end) ) with system versioning; --replace_result "bigint unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE --error ER_VERS_PERIOD_COLUMNS eval create or replace table t1 ( x5 int unsigned, Sys_start $sys_datatype generated always as row start, Sys_end $sys_datatype generated always as row end, Sys_end2 $sys_datatype generated always as row end, period for system_time (Sys_start, Sys_end) ) with system versioning; --error ER_MISSING create or replace table t1 ( x6 int unsigned, period for system_time (Sys_start, Sys_end) ) with system versioning; --replace_result "bigint unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE --error ER_MISSING eval create or replace table t1 ( x7 int unsigned, Sys_start $sys_datatype generated always as row start, Sys_end $sys_datatype generated always as row end, Sys_end2 $sys_datatype generated always as row end, period for system_time (Sys_start, Sys_end) ); --replace_result "bigint unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE --error ER_VERS_PERIOD_COLUMNS eval create or replace table t1 ( x8 int unsigned, Sys_start $sys_datatype generated always as row start, Sys_end $sys_datatype generated always as row end, period for system_time (sys_insert, sys_remove) ) with system versioning; --replace_result "bigint unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE --error ER_MISSING eval create or replace table t1 ( x9 int unsigned, Sys_start $sys_datatype generated always as row start, Sys_end $sys_datatype generated always as row end, period for system_time (Sys_start, Sys_end) ); --replace_result "bigint unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE --error ER_MISSING eval create or replace table t1 ( x10 int unsigned, Sys_start $sys_datatype generated always as row start, Sys_end $sys_datatype generated always as row end, period for system_time (Sys_start, Sys_start) ); --error ER_VERS_FIELD_WRONG_TYPE, ER_VERS_FIELD_WRONG_TYPE create or replace table t1 ( x11 int unsigned, Sys_start bigint unsigned generated always as row start, Sys_end timestamp(6) generated always as row end, period for system_time (Sys_start, Sys_end) ) with system versioning; --error ER_VERS_FIELD_WRONG_TYPE, ER_VERS_FIELD_WRONG_TYPE create or replace table t1 ( x12 int unsigned, Sys_start timestamp(6) generated always as row start, Sys_end bigint unsigned generated always as row end, period for system_time (Sys_start, Sys_end) ) with system versioning; --error ER_VERS_FIELD_WRONG_TYPE create or replace table t1 ( x13 int unsigned, Sys_start bigint generated always as row start, Sys_end bigint unsigned generated always as row end, period for system_time (Sys_start, Sys_end) ) with system versioning engine innodb; --error ER_VERS_FIELD_WRONG_TYPE create or replace table t1 ( x14 int unsigned, Sys_start bigint unsigned generated always as row start, Sys_end bigint generated always as row end, period for system_time (Sys_start, Sys_end) ) with system versioning engine innodb; # columns with/without system versioning create or replace table t1 ( A1 int with system versioning, B int ); --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; create or replace table t1 ( A2 int with system versioning, B int ) with system versioning; --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; create or replace table t1 ( A3 int, B int without system versioning ); create or replace table t1 ( A4 int, B int without system versioning ) with system versioning; --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; create or replace table t1 ( A5 int with system versioning, B int without system versioning ); --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; create or replace table t1 ( A6 int with system versioning, B int without system versioning ) with system versioning; --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; create or replace table t1 ( A7 int without system versioning ); --error ER_VERS_NO_COLS_DEFINED create or replace table t1 ( A8 int without system versioning ) with system versioning; # CREATE TABLE ... LIKE create or replace table t1 (a int) with system versioning; create table tt1 like t1; --replace_result InnoDB INNODB_OR_MYISAM MyISAM INNODB_OR_MYISAM "bigint(20) unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE show create table tt1; drop table tt1; create temporary table tt1 like t1; --echo # Temporary is stripped from versioning --replace_result InnoDB INNODB_OR_MYISAM MyISAM INNODB_OR_MYISAM show create table tt1; # CREATE TABLE ... SELECT create or replace table t1 (x int) with system versioning; --replace_result "bigint unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE eval create or replace table t0( y int, st $sys_datatype generated always as row start, en $sys_datatype generated always as row end, period for system_time (st, en) ) with system versioning; ## For non-versioned table: ### 1. system fields are not inherited (hidden and not hidden) create or replace table t2 as select * from t1; --replace_result InnoDB INNODB_OR_MYISAM MyISAM INNODB_OR_MYISAM show create table t2; create or replace table t3 as select * from t0; --replace_result InnoDB INNODB_OR_MYISAM MyISAM INNODB_OR_MYISAM show create table t3; ### 2. hidden fields are inherited as hidden ### TODO: non-system hidden fields ## For versioned table system fields are inherited as is. insert into t1 values (1); insert into t0 values (2); create or replace table t2 with system versioning as select * from t1; --replace_result InnoDB INNODB_OR_MYISAM MyISAM INNODB_OR_MYISAM "bigint(20) unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE show create table t2; # implicit system fields are hidden select * from t2; create or replace table t3 with system versioning as select * from t0; --replace_result InnoDB INNODB_OR_MYISAM MyISAM INNODB_OR_MYISAM "bigint(20) unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE show create table t3; # explicit system fields are not hidden select * from t3 where y > 2; delete from t0; ## Combinations of versioned + non-versioned create or replace table t1 (x int) with system versioning; create or replace table t2 (y int); create or replace table t3 with system versioning select * from t1 for system_time all, t2; --replace_result InnoDB INNODB_OR_MYISAM MyISAM INNODB_OR_MYISAM "bigint(20) unsigned" SYS_TRX_TYPE timestamp(6) SYS_TRX_TYPE show create table t3; create or replace table t2 with system versioning as select * from t0; --error ER_VERS_DIFFERENT_TABLES create or replace table t3 with system versioning select x, y, t1.sys_trx_start, t2.en from t1, t2; insert into t2 values (1), (2); delete from t2 where y = 2; create or replace table t3 select * from t2 for system_time all; select st, en from t2 where y = 1 into @st, @en; select y from t2 for system_time all where st = @st and en = @en; select st, en from t2 for system_time all where y = 2 into @st, @en; select y from t2 for system_time all where st = @st and en = @en; --replace_result innodb INNODB_OR_MYISAM myisam INNODB_OR_MYISAM eval create or replace table t1 (a int) with system versioning engine $non_default_engine; create or replace table t2 as select a, sys_trx_start, sys_trx_end from t1 for system_time all; --replace_result innodb INNODB_OR_MYISAM myisam INNODB_OR_MYISAM "BIGINT(20) UNSIGNED" SYS_TRX_TYPE "TIMESTAMP(6)" SYS_TRX_TYPE --error ER_VERS_FIELD_WRONG_TYPE eval create or replace table t2 with system versioning engine $default_engine as select a, sys_trx_start, sys_trx_end from t1 for system_time all; --replace_result innodb INNODB_OR_MYISAM myisam INNODB_OR_MYISAM eval create or replace table t1 (a int, id int) with system versioning engine $non_default_engine; create or replace table t2 (b int, id int); create or replace table t3 as select t2.b, t1.a, t1.sys_trx_start, t1.sys_trx_end from t2 inner join t1 on t2.id=t1.id; create or replace table t (sys_trx_start int); --error ER_DUP_FIELDNAME alter table t with system versioning; create or replace table t (sys_trx_end int); --error ER_DUP_FIELDNAME alter table t with system versioning; --error ER_WRONG_USAGE create or replace temporary table t (x int) with system versioning; drop database test; create database test;