-- source include/have_partition.inc -- source suite/versioning/common.inc --echo # Check conventional partitioning on temporal tables create table t1 (x int) with system versioning partition by range columns (x) ( partition p0 values less than (100), partition p1 values less than (1000)); insert into t1 values (3), (300); select * from t1; select * from t1 partition (p0); select * from t1 partition (p1); delete from t1; select * from t1; select * from t1 for system_time all; select * from t1 partition (p0); select * from t1 partition (p1); --echo # Engine change native <-> non-native versioning prohibited --replace_result $default_engine DEFAULT_ENGINE eval create or replace table t1 (i int) engine=$default_engine with system versioning partition by hash(i); --replace_result $non_default_engine NON_DEFAULT_ENGINE --error ER_VERS_ALTER_ENGINE_PROHIBITED eval alter table t1 engine=$non_default_engine; --echo # Check server-level partitioning --echo ## create errors --error ER_VERS_ENGINE_UNSUPPORTED create or replace table t1 (x int) partition by system_time ( partition p0 history, partition pn current); create or replace table t1 (x int); --error ER_VERS_ENGINE_UNSUPPORTED,ER_VERS_ENGINE_UNSUPPORTED alter table t1 partition by system_time ( partition p0 history, partition pn current); --error ER_VERS_WRONG_PARTS create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 current); --error ER_VERS_WRONG_PARTS create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 current, partition p1 current); --error ER_VERS_WRONG_PARTS create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 history, partition p1 history); --error ER_VERS_WRONG_PARTS create or replace table t1 (x int) with system versioning partition by system_time ( partition pn current, partition p0 history); create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 history, partition pn current); --echo ## alter table --error ER_VERS_WRONG_PARTS alter table t1 add partition ( partition p1 current); alter table t1 add partition ( partition p1 history); --replace_result $default_engine DEFAULT_ENGINE $sys_datatype SYS_DATATYPE show create table t1; insert into t1 values (1), (2); --error ER_VERS_WRONG_PARTS alter table t1 drop partition pn; alter table t1 drop partition p1; --error ER_VERS_WRONG_PARTS alter table t1 drop partition p0; select x from t1; --echo # Bug #260: incorrect IB partitioning warning create or replace table t1 (x int) with system versioning partition by system_time limit 1 ( partition p0 history, partition pn current); alter table t1 change x big int; --echo ## insert, delete, update create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 history, partition pn current); set @now= now(6); insert into t1 values (1); set @str= concat('select x, sys_trx_start < @now as A, sys_trx_end > @now as B from t1 partition (p0)'); prepare select_p0 from @str; set @str= concat('select x, sys_trx_start > @now as C, sys_trx_end = timestamp\'2038-01-19 03:14:07.999999\' as D from t1 partition (pn)'); prepare select_pn from @str; execute select_p0; execute select_pn; --echo ## pruning check --replace_regex /\d/N/ /ALL/system/ /Using where// explain partitions select * from t1; set @str= concat('select sys_trx_start from t1 partition (pn) into @ts0'); prepare stmt from @str; execute stmt; drop prepare stmt; set @now= now(6); delete from t1; execute select_p0; execute select_pn; set @str= concat('select sys_trx_start from t1 partition (p0) into @ts1'); prepare stmt from @str; execute stmt; drop prepare stmt; select @ts0 = @ts1; set @now= now(6); insert into t1 values (2); execute select_p0; execute select_pn; set @str= concat('select sys_trx_start from t1 partition (pn) into @ts0'); prepare stmt from @str; execute stmt; drop prepare stmt; set @now= now(6); update t1 set x = x + 1; execute select_p0; execute select_pn; drop prepare select_p0; drop prepare select_pn; set @str= concat('select sys_trx_start from t1 partition (p0) where x = 2 into @ts1'); prepare stmt from @str; execute stmt; drop prepare stmt; set @str= concat('select sys_trx_end from t1 partition (p0) where x = 2 into @ts2'); prepare stmt from @str; execute stmt; drop prepare stmt; set @str= concat('select sys_trx_start from t1 partition (pn) into @ts3'); prepare stmt from @str; execute stmt; drop prepare stmt; select @ts0 = @ts1; select @ts2 = @ts3; --echo ## rotation by LIMIT --error ER_PART_WRONG_VALUE create or replace table t1 (x int) with system versioning partition by system_time limit 0 ( partition p0 history, partition p1 history, partition pn current); create or replace table t1 (x int) with system versioning partition by system_time limit 2 ( partition p0 history, partition p1 history, partition pn current); --replace_result $default_engine DEFAULT_ENGINE $sys_datatype SYS_DATATYPE show create table t1; --error ER_DROP_PARTITION_NON_EXISTENT alter table t1 drop partition non_existent; insert into t1 values (1), (2), (3); select * from t1 partition (pn); --echo ### warn about partition switching delete from t1; select * from t1 partition (p0); select * from t1 partition (p1); insert into t1 values (4), (5); --echo ### warn about full partition delete from t1; select * from t1 partition (p1) order by x; --echo ## rotation by INTERVAL --error ER_PART_WRONG_VALUE create or replace table t1 (x int) with system versioning partition by system_time interval 0 second ( partition p0 history, partition p1 history, partition pn current); create or replace table t1 (x int) with system versioning partition by system_time interval 1 second ( partition p0 history, partition p1 history, partition pn current); insert into t1 values (1), (2), (3); select * from t1 partition (pn); delete from t1; select * from t1 partition (p0); --sleep 2 insert into t1 values (4); delete from t1; select * from t1 partition (p1); --echo ## Subpartitions create or replace table t1 (x int) with system versioning partition by system_time limit 2 subpartition by key (x) subpartitions 2 ( partition p0 history, partition p1 history, partition pn current); insert into t1 (x) values (1), (2), (3), (4), (5); select * from t1 partition (pnsp0); select * from t1 partition (pnsp1); --echo ### warn about partition switching and about full partition delete from t1; select * from t1 partition (p0sp0); select * from t1 partition (p0sp1); select * from t1 partition (p1sp0); select * from t1 partition (p1sp1); create or replace table t1 (a bigint) with system versioning partition by range (a) (partition p0 values less than (20) engine innodb, partition p1 values less than maxvalue engine innodb); insert into t1 values (1); create or replace table t1 ( f_int1 integer default 0 ) with system versioning partition by range(f_int1) subpartition by hash(f_int1) ( partition part1 values less than (1000) (subpartition subpart11 storage engine = 'innodb', subpartition subpart12 storage engine = 'innodb')); insert into t1 values (1); create or replace table t1 (i int) engine=innodb partition by key(i); alter table t1 add system versioning; insert into t1 values(); drop table t1; -- source suite/versioning/common_finish.inc