mirror of
https://github.com/MariaDB/server.git
synced 2025-05-20 13:13:59 +03:00
495 lines
16 KiB
Plaintext
495 lines
16 KiB
Plaintext
-- source include/have_partition.inc
|
|
-- source suite/versioning/common.inc
|
|
-- source suite/versioning/engines.inc
|
|
|
|
set system_versioning_alter_history=keep;
|
|
--echo # Check conventional partitioning on temporal tables
|
|
|
|
--replace_result $sys_datatype_expl SYS_DATATYPE
|
|
eval create or replace table t1 (
|
|
x int,
|
|
row_start $sys_datatype_expl as row start invisible,
|
|
row_end $sys_datatype_expl as row end invisible,
|
|
period for system_time(row_start, row_end))
|
|
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 partition (p0);
|
|
select * from t1 partition (p1);
|
|
select * from t1 for system_time all;
|
|
select * from t1 partition (p0) for system_time all;
|
|
select * from t1 partition (p1) for system_time all;
|
|
|
|
--echo # Engine change native <-> non-native versioning prohibited
|
|
--replace_result $sys_datatype_expl SYS_DATATYPE $default_engine DEFAULT_ENGINE
|
|
eval create or replace table t1 (
|
|
i int,
|
|
row_start $sys_datatype_expl as row start invisible,
|
|
row_end $sys_datatype_expl as row end invisible,
|
|
period for system_time(row_start, row_end))
|
|
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 ## CREATE TABLE
|
|
|
|
--error ER_VERS_NOT_VERSIONED
|
|
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_NOT_VERSIONED
|
|
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);
|
|
|
|
--error ER_VERS_WRONG_PARTS
|
|
create or replace table t1 (x int)
|
|
with system versioning
|
|
partition by system_time (
|
|
partition p0,
|
|
partition pn current);
|
|
|
|
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
|
|
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;
|
|
|
|
create or replace table t1 (i int) engine myisam partition by hash(i) partitions 2;
|
|
--error ER_PARTITION_WRONG_TYPE
|
|
alter table t1 add partition (partition px history);
|
|
|
|
|
|
--echo ## INSERT, UPDATE, DELETE
|
|
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, row_start < @now as A, row_end > @now as B from t1 partition (p0)');
|
|
prepare select_p0 from @str;
|
|
set @str= concat('select x, row_start > @now as C, row_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;
|
|
|
|
set @str= concat('select row_start from t1 partition (pn) into @ts0');
|
|
prepare stmt from @str; execute stmt; drop prepare stmt;
|
|
|
|
--source suite/versioning/wait_system_clock.inc
|
|
|
|
set @now= now(6);
|
|
delete from t1;
|
|
execute select_p0;
|
|
execute select_pn;
|
|
|
|
set @str= concat('select row_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);
|
|
|
|
--source suite/versioning/wait_system_clock.inc
|
|
|
|
execute select_p0;
|
|
execute select_pn;
|
|
|
|
set @str= concat('select row_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;
|
|
|
|
--source suite/versioning/wait_system_clock.inc
|
|
|
|
execute select_p0;
|
|
execute select_pn;
|
|
|
|
drop prepare select_p0;
|
|
drop prepare select_pn;
|
|
|
|
set @str= concat('select row_start from t1 partition (p0) where x = 2 into @ts1');
|
|
prepare stmt from @str; execute stmt; drop prepare stmt;
|
|
set @str= concat('select row_end from t1 partition (p0) where x = 2 into @ts2');
|
|
prepare stmt from @str; execute stmt; drop prepare stmt;
|
|
set @str= concat('select row_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
|
|
show create table t1;
|
|
|
|
--error ER_DROP_PARTITION_NON_EXISTENT
|
|
alter table t1 drop partition non_existent;
|
|
|
|
insert into t1 values (1), (2), (3), (4), (5), (6);
|
|
select * from t1 partition (pn);
|
|
delete from t1 where x < 4;
|
|
delete from t1;
|
|
select * from t1 partition (p0);
|
|
select * from t1 partition (p1);
|
|
|
|
insert into t1 values (7), (8);
|
|
--echo ### warn about full partition
|
|
delete from t1;
|
|
select * from t1 partition (p1) order by x;
|
|
|
|
--echo ### Assertion in ALTER on warning from partitioning LIMIT [#446]
|
|
create or replace table t1 (x int) with system versioning;
|
|
insert into t1 values (1), (2);
|
|
delete from t1;
|
|
alter table t1 partition by system_time limit 1 (
|
|
partition p1 history,
|
|
partition pn current);
|
|
|
|
--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);
|
|
|
|
--error ER_PARSE_ERROR
|
|
create or replace table t1 (x int)
|
|
with system versioning
|
|
partition by system_time interval 1 second starts 12345 (
|
|
partition p0 history,
|
|
partition p1 history,
|
|
partition pn current);
|
|
|
|
--error ER_PARSE_ERROR
|
|
create table t1 (i int) with system versioning
|
|
partition by system_time interval 6 day limit 98
|
|
(partition p0 history, partition ver_pn current);
|
|
|
|
--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 full partition
|
|
delete from t1 where x < 3;
|
|
delete from t1;
|
|
delete from t1;
|
|
select * from t1 partition (p0sp0);
|
|
select * from t1 partition (p0sp1);
|
|
select * from t1 partition (p1sp0);
|
|
select * from t1 partition (p1sp1);
|
|
|
|
--replace_result $sys_datatype_expl SYS_DATATYPE
|
|
eval create or replace table t1 (
|
|
a bigint,
|
|
row_start $sys_datatype_expl as row start invisible,
|
|
row_end $sys_datatype_expl as row end invisible,
|
|
period for system_time(row_start, row_end))
|
|
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);
|
|
|
|
--replace_result $sys_datatype_expl SYS_DATATYPE
|
|
eval create or replace table t1 (
|
|
f_int1 integer default 0,
|
|
row_start $sys_datatype_expl as row start invisible,
|
|
row_end $sys_datatype_expl as row end invisible,
|
|
period for system_time(row_start, row_end)
|
|
) 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);
|
|
--replace_result $sys_datatype_expl SYS_DATATYPE
|
|
eval alter table t1
|
|
add column row_start $sys_datatype_expl as row start invisible,
|
|
add column row_end $sys_datatype_expl as row end invisible,
|
|
add period for system_time(row_start, row_end),
|
|
add system versioning;
|
|
insert into t1 values();
|
|
|
|
--echo # MDEV-14722 Assertion in ha_commit_trans for sub-statement
|
|
create or replace table t1 (i int) with system versioning
|
|
partition by system_time interval 1 day (
|
|
partition p1 history,
|
|
partition pc current);
|
|
create or replace table t2 (f int);
|
|
create or replace trigger tr before insert on t2
|
|
for each row select table_rows from information_schema.tables
|
|
where table_name = 't1' into @a;
|
|
insert into t2 values (1);
|
|
|
|
--echo # MDEV-14740 Locking assertion for system_time partitioning
|
|
create or replace table t1 (i int) with system versioning
|
|
partition by system_time interval 1 week (
|
|
partition p1 history,
|
|
partition pn current);
|
|
create or replace table t2 (f int);
|
|
create or replace trigger tr before insert on t2
|
|
for each row select count(*) from t1 into @a;
|
|
insert into t2 values (1);
|
|
|
|
--echo # MDEV-14741 Assertion `(trx)->start_file == 0' failed in row_truncate_table_for_mysql()
|
|
create or replace table t1 (i int) with system versioning
|
|
partition by system_time interval 1 hour (
|
|
partition p1 history,
|
|
partition pn current);
|
|
set autocommit= off;
|
|
truncate table t1;
|
|
set autocommit= on;
|
|
|
|
--echo # MDEV-14747 ALTER PARTITION BY SYSTEM_TIME after LOCK TABLES
|
|
create or replace table t1 (x int) with system versioning;
|
|
lock table t1 write;
|
|
alter table t1 partition by system_time interval 1 week (
|
|
partition p1 history,
|
|
partition pn current);
|
|
unlock tables;
|
|
|
|
--echo # MDEV-14748 Assertion in ha_myisammrg::attach_children()
|
|
create or replace table t1 (x int) engine=myisam with system versioning
|
|
partition by system_time interval 1 month (partition p1 history, partition pn current);
|
|
create or replace table t2 (x int) engine=myisam;
|
|
create or replace table t3 (x int) engine=merge union=(t2);
|
|
create or replace table t4 (x int) engine=myisam;
|
|
create or replace trigger tr after insert on t4 for each row insert into t2
|
|
( select x from t3 ) union ( select x from t1 );
|
|
insert into t4 values (1);
|
|
|
|
--echo # MDEV-14821 Assertion failure
|
|
create or replace table t1 (x int) with system versioning;
|
|
insert into t1 values (0), (1);
|
|
update t1 set x= x + 1;
|
|
alter table t1 partition by system_time limit 1 (
|
|
partition p1 history,
|
|
partition p2 history,
|
|
partition pn current);
|
|
delete from t1 where x = 1;
|
|
delete from t1 where x = 2;
|
|
|
|
--echo # MDEV-14923 Assertion upon INSERT into locked versioned partitioned table
|
|
create or replace table t1 (x int) with system versioning
|
|
partition by system_time (partition p1 history, partition pn current);
|
|
lock table t1 write;
|
|
--error ER_SAME_NAME_PARTITION
|
|
alter table t1 add partition (partition p1 history);
|
|
insert into t1 values (1);
|
|
unlock tables;
|
|
|
|
--error ER_DATA_OUT_OF_RANGE
|
|
create or replace table t1 (pk int) with system versioning
|
|
partition by system_time interval 10 year (
|
|
partition p1 history,
|
|
partition p2 history,
|
|
partition pn current
|
|
);
|
|
|
|
# INTERVAL and ALTER TABLE
|
|
create or replace table t1 (i int) with system versioning
|
|
partition by system_time interval 1 hour (
|
|
partition p0 history, partition pn current);
|
|
|
|
set @ts=(select partition_description from information_schema.partitions
|
|
where table_schema='test' and table_name='t1' and partition_name='p0');
|
|
|
|
alter table t1 add column b int;
|
|
select partition_name,partition_ordinal_position,partition_method,timediff(partition_description, @ts) from information_schema.partitions where table_schema='test' and table_name='t1';
|
|
alter table t1 add partition (partition p1 history, partition p2 history);
|
|
select partition_name,partition_ordinal_position,partition_method,timediff(partition_description, @ts) from information_schema.partitions where table_schema='test' and table_name='t1';
|
|
alter table t1 drop partition p0;
|
|
select partition_name,partition_ordinal_position,partition_method,timediff(partition_description, @ts) from information_schema.partitions where table_schema='test' and table_name='t1';
|
|
--error ER_VERS_DROP_PARTITION_INTERVAL
|
|
alter table t1 drop partition p2;
|
|
select partition_name,partition_ordinal_position,partition_method,timediff(partition_description, @ts) from information_schema.partitions where table_schema='test' and table_name='t1';
|
|
|
|
--echo #
|
|
--echo # MDEV-15103 Assertion in ha_partition::part_records() for updating VIEW
|
|
--echo #
|
|
create or replace table t1 (pk int primary key, f int) with system versioning
|
|
partition by system_time limit 100 (partition p1 history, partition pn current);
|
|
insert into t1 values (1,10), (2,20);
|
|
create or replace view v1 as select * from t1;
|
|
update v1 set f= 30;
|
|
|
|
--echo #
|
|
--echo # MDEV-15168 Unexpected ER_VERS_ENGINE_UNSUPPORTED upon dropping versioning on a partitioned table
|
|
--echo #
|
|
create or replace table t (a int) with system versioning
|
|
partition by system_time (partition p1 history, partition pn current);
|
|
--error ER_DROP_VERSIONING_SYSTEM_TIME_PARTITION
|
|
alter table t drop system versioning;
|
|
|
|
--echo # MDEV-15191 Assertion `bit < (map)->n_bits' failed in bitmap_is_set upon INSERT
|
|
create or replace table t1 (i int) with system versioning;
|
|
insert into t1 values (1), (2);
|
|
update t1 set i= 3;
|
|
alter table t1 partition by system_time interval 1 month (partition p1 history, partition pn current);
|
|
lock table t1 write;
|
|
alter table t1 add partition (partition p2 history);
|
|
insert into t1 values (4);
|
|
unlock tables;
|
|
|
|
--echo # MDEV-15036 Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' in Diagnostics_area::set_ok_status or unexpected ER_RANGE_NOT_INCREASING_ERROR
|
|
create or replace table t1 (a int) with system versioning
|
|
partition by system_time limit 2 (
|
|
partition p1 history, partition p2 history,
|
|
partition p3 history, partition pn current);
|
|
insert into t1 values (1),(2),(3);
|
|
update t1 set a = 4;
|
|
delete from t1;
|
|
delete from t1 where a is not null;
|
|
|
|
--echo # MDEV-14823 Wrong error message upon selecting from a system_time partition
|
|
create or replace table t1 (i int) with system versioning partition by system_time limit 10 (partition p0 history, partition pn current);
|
|
--error ER_VERS_QUERY_IN_PARTITION
|
|
select * from t1 partition (p0) for system_time all;
|
|
|
|
--echo # MDEV-15380 Index for versioned table gets corrupt after partitioning and DELETE
|
|
create or replace table t1 (pk int primary key)
|
|
engine=myisam
|
|
with system versioning
|
|
partition by key() partitions 3;
|
|
set timestamp=1523466002.799571;
|
|
insert into t1 values (11),(12);
|
|
set timestamp=1523466004.169435;
|
|
delete from t1 where pk in (11, 12);
|
|
--echo Same test but for Aria storage engine
|
|
create or replace table t1 (pk int primary key)
|
|
engine=aria
|
|
with system versioning
|
|
partition by key() partitions 3;
|
|
set timestamp=1523466002.799571;
|
|
insert into t1 values (11),(12);
|
|
set timestamp=1523466004.169435;
|
|
delete from t1 where pk in (11, 12);
|
|
|
|
--echo #
|
|
--echo # MDEV-18136 Server crashes in Item_func_dyncol_create::prepare_arguments
|
|
--echo #
|
|
create or replace table t1 (pk int) with system versioning
|
|
partition by system_time interval 7 second (
|
|
partition ver_p1 history,
|
|
partition ver_pn current);
|
|
alter table t1
|
|
partition by system_time interval column_get(column_create(7,7), 7 as int) second (
|
|
partition ver_p1 history,
|
|
partition ver_pn current);
|
|
--replace_result $default_engine DEFAULT_ENGINE
|
|
show create table t1;
|
|
|
|
--echo # Test cleanup
|
|
drop database test;
|
|
create database test;
|