mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
When there are E empty partitions left, auto-create N new empty partitions for SYSTEM_TIME partitioning rotated by INTERVAL/LIMIT and marked by AUTO_INCREMENT keyword. Syntax change: AUTO_INCREMENT keyword (or shorter AUTO may be used instead) after LIMIT/INTERVAL clause. CREATE OR REPLACE TABLE t (x INT) WITH SYSTEM VERSIONING PARTITION BY SYSTEM_TIME LIMIT 100000 AUTO_INCREMENT; CREATE OR REPLACE TABLE t (x INT) WITH SYSTEM VERSIONING PARTITION BY SYSTEM_TIME INTERVAL 1 WEEK AUTO_INCREMENT; The current revision implements hard-coded values of 1 for E and N. As well as auto-creation threshold MinInterval = 1 hour, MinLimit = 1000. The name for newly added partition will be first chosen as "pX", where X is partition number and "p" is hard-coded name prefix. If this name is already occupied, the X will be incremented until the resulting name will be free to use. ALTER TABLE ADD PARTITION is now always fast. If there some history partition overflow occurs manual ALTER TABLE REBUILD PARTITION is needed.
183 lines
5.2 KiB
Text
183 lines
5.2 KiB
Text
--source suite/versioning/common.inc
|
|
--source include/have_partition.inc
|
|
--source suite/versioning/engines.inc
|
|
|
|
call mtr.add_suppression("need more HISTORY partitions");
|
|
|
|
create table t (a int);
|
|
--error ER_VERS_NOT_VERSIONED
|
|
delete history from t before system_time now();
|
|
|
|
# TRUNCATE is not DELETE and trigger must not be called.
|
|
--replace_result $sys_datatype_expl SYS_TYPE
|
|
eval create or replace table t (
|
|
a 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;
|
|
insert into t values (1);
|
|
update t set a=2;
|
|
set @test = 'correct';
|
|
create trigger trg_before before delete on t for each row set @test = 'incorrect';
|
|
create trigger trg_after after delete on t for each row set @test = 'incorrect';
|
|
delete history from t;
|
|
select @test from t;
|
|
drop table t;
|
|
|
|
--replace_result $sys_datatype_expl SYS_TYPE
|
|
eval create or replace table t (
|
|
a 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;
|
|
insert into t values (1), (2);
|
|
update t set a=11 where a=1;
|
|
--real_sleep 0.01
|
|
set @ts1=now(6);
|
|
--real_sleep 0.01
|
|
update t set a=22 where a=2;
|
|
select * from t for system_time all;
|
|
delete history from t before system_time timestamp @ts1;
|
|
select * from t for system_time all;
|
|
prepare stmt from 'delete history from t';
|
|
execute stmt; drop prepare stmt;
|
|
select * from t for system_time all;
|
|
delete from t;
|
|
|
|
delimiter ~~;
|
|
create or replace procedure truncate_sp()
|
|
begin
|
|
delete history from t before system_time timestamp now(6);
|
|
end~~
|
|
delimiter ;~~
|
|
call truncate_sp;
|
|
select * from t for system_time all;
|
|
|
|
drop procedure truncate_sp;
|
|
|
|
--echo # Truncate partitioned
|
|
create or replace table t (a int) with system versioning
|
|
partition by system_time limit 1 partitions 3;
|
|
insert into t values (1);
|
|
update t set a= 2;
|
|
update t set a= 3;
|
|
delete history from t;
|
|
--echo # The above warning is one command late (MDEV-20345) ^^^
|
|
select * from t for system_time all;
|
|
|
|
--echo # VIEW
|
|
--replace_result $sys_datatype_expl SYS_TYPE
|
|
eval create or replace table t (
|
|
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))
|
|
with system versioning;
|
|
delete history from t;
|
|
create or replace view v as select * from t;
|
|
--error ER_IT_IS_A_VIEW
|
|
delete history from v;
|
|
|
|
create or replace table t (i int);
|
|
--error ER_VERS_NOT_VERSIONED
|
|
delete history from t;
|
|
create or replace view v as select * from t;
|
|
--error ER_IT_IS_A_VIEW
|
|
delete history from v;
|
|
--error ER_VERS_NOT_VERSIONED
|
|
prepare stmt from 'delete history from t';
|
|
|
|
drop table t;
|
|
drop view v;
|
|
|
|
#
|
|
# MDEV-15402 Assertion `table' failed in mysql_delete on attempt to delete history from view
|
|
#
|
|
create or replace table t (i int);
|
|
create or replace view v as select * from t;
|
|
--error ER_IT_IS_A_VIEW
|
|
drop table v;
|
|
lock table v write;
|
|
--error ER_IT_IS_A_VIEW
|
|
delete history from v before system_time now(6);
|
|
unlock tables;
|
|
drop view v;
|
|
drop table t;
|
|
|
|
#
|
|
# MDEV-16783 Assertion `!conds' failed in mysql_delete upon 2nd execution of SP with DELETE HISTORY
|
|
#
|
|
create table t1 (i int) with system versioning;
|
|
create procedure pr() delete history from t1 before system_time now();
|
|
call pr;
|
|
call pr;
|
|
drop procedure pr;
|
|
drop table t1;
|
|
|
|
--echo # MDEV-15966 Behavior for TRUNCATE versioned table is not documented and not covered by tests
|
|
create or replace table t1 (id int);
|
|
create or replace table t2 (id int) with system versioning;
|
|
|
|
-- echo # force cleaning table shares
|
|
flush tables t1, t2;
|
|
|
|
truncate table t1;
|
|
--error ER_VERS_NOT_SUPPORTED
|
|
truncate table t2;
|
|
|
|
-- echo # fetch table shares
|
|
describe t1;
|
|
describe t2;
|
|
|
|
truncate table t1;
|
|
--error ER_VERS_NOT_SUPPORTED
|
|
truncate table t2;
|
|
|
|
--echo # enter locked tables mode
|
|
lock tables t1 WRITE, t2 WRITE;
|
|
|
|
truncate t1;
|
|
--error ER_VERS_NOT_SUPPORTED
|
|
truncate t2;
|
|
|
|
unlock tables;
|
|
drop table t2;
|
|
|
|
--echo #
|
|
--echo # MDEV-19814 Assertion `update->n_fields < ulint(table->n_cols + table->n_v_cols)' on DELETE HISTORY
|
|
--echo #
|
|
--replace_result $sys_datatype_expl SYS_TYPE
|
|
eval create or replace table t1 (
|
|
f varchar(1),
|
|
row_start $sys_datatype_expl as row start,
|
|
row_end $sys_datatype_expl as row end,
|
|
period for system_time (row_start, row_end))
|
|
with system versioning;
|
|
insert into t1 (f) values ('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('g'), ('h');
|
|
delete from t1;
|
|
delete history from t1;
|
|
drop table t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-20186 Wrong result or Assertion on INSERT after DELETE HISTORY
|
|
--echo #
|
|
create or replace table t1 (a int check (a > 0)) with system versioning;
|
|
delete history from t1;
|
|
insert into t1 values (1);
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-17554 Auto-create new partition for system versioned tables with history partitioned by INTERVAL/LIMIT
|
|
--echo #
|
|
--echo # Don't auto-create new partition on DELETE HISTORY:
|
|
create or replace table t (a int)
|
|
with system versioning
|
|
partition by system_time limit 1000;
|
|
delete history from t;
|
|
select count(*) - 1 as hist_partitions from information_schema.partitions where table_name = 't' and table_schema = 'test';
|
|
drop table t;
|
|
|
|
--source suite/versioning/common_finish.inc
|