mirror of
https://github.com/MariaDB/server.git
synced 2025-11-10 23:02:54 +03:00
use include/have_xxx.inc when some feature needs to be present (because --xxx in the opt file will fail if the xxx is not compiled in) set variables in the test, not on the command line, to avoid unnecessary server restarts (they're must slower than SET).
207 lines
5.1 KiB
Plaintext
207 lines
5.1 KiB
Plaintext
-- source include/have_innodb.inc
|
|
set default_storage_engine=innodb;
|
|
|
|
delimiter ~~;
|
|
create or replace procedure drop_archives (in vtmd_name varchar(64))
|
|
begin
|
|
declare archive_name varchar(64);
|
|
declare cur_done bool default false;
|
|
declare cur cursor for
|
|
select cur_tmp.archive_name from cur_tmp;
|
|
declare continue handler for not found set cur_done = true;
|
|
|
|
set @tmp= concat('
|
|
create or replace temporary table
|
|
cur_tmp as
|
|
select vtmd.archive_name from ', vtmd_name, '
|
|
for system_time all as vtmd
|
|
where vtmd.archive_name is not null
|
|
group by vtmd.archive_name');
|
|
prepare stmt from @tmp; execute stmt; drop prepare stmt;
|
|
|
|
open cur;
|
|
fetch_loop: loop
|
|
fetch cur into archive_name;
|
|
if cur_done then
|
|
leave fetch_loop;
|
|
end if;
|
|
set @tmp= concat('drop table ', archive_name);
|
|
prepare stmt from @tmp; execute stmt; drop prepare stmt;
|
|
end loop;
|
|
|
|
drop table cur_tmp;
|
|
end~~
|
|
delimiter ;~~
|
|
|
|
delimiter ~~;
|
|
create or replace procedure check_vtmd (in vtmd_name varchar(64))
|
|
begin
|
|
set @tmp= concat('
|
|
create or replace temporary table
|
|
tmp_vtmd with system versioning as
|
|
select * from ', vtmd_name, '
|
|
for system_time all as vtmd');
|
|
prepare stmt from @tmp; execute stmt; drop prepare stmt;
|
|
|
|
set @inf= 0xFFFFFFFFFFFFFFFF + 0;
|
|
set @start= null;
|
|
select start from tmp_vtmd for system_time all order by start limit 1 into @start;
|
|
select @start > 0 and @start < @inf;
|
|
select
|
|
start >= @start as A_start,
|
|
(@start:= end) and end = @inf as B_end,
|
|
name,
|
|
substr(archive_name, 1, instr(archive_name, '_')) as C_archive_name
|
|
from tmp_vtmd for system_time all;
|
|
|
|
drop table tmp_vtmd;
|
|
end~~
|
|
delimiter ;~~
|
|
|
|
delimiter ~~;
|
|
create or replace procedure show_tables()
|
|
begin
|
|
show tables;
|
|
select table_name, table_schema from information_schema.tables
|
|
where table_schema not in ('mysql', 'performance_schema', 'information_schema', 'mtr')
|
|
order by table_name;
|
|
end~~
|
|
delimiter ;~~
|
|
|
|
# create
|
|
set versioning_alter_history= keep;
|
|
create table t0 (z int) with system versioning;
|
|
show tables;
|
|
set versioning_alter_history= survive;
|
|
create or replace table t0 (y int) with system versioning;
|
|
show tables;
|
|
show create table t0_vtmd;
|
|
call check_vtmd('t0_vtmd');
|
|
|
|
set versioning_alter_history= keep;
|
|
drop table t0;
|
|
set versioning_alter_history= survive;
|
|
--error ER_VERS_VTMD_ERROR
|
|
create table t0 (x int) with system versioning;
|
|
|
|
drop table t0_vtmd;
|
|
create table t0 (y int) with system versioning;
|
|
create or replace table t0 (x int) with system versioning;
|
|
|
|
# alter
|
|
insert into t0 values (1);
|
|
set @t0= now(6);
|
|
alter table t0 add column (y int);
|
|
select * from t0 for system_time as of @t0;
|
|
select * from t0;
|
|
call check_vtmd('t0_vtmd');
|
|
|
|
call drop_archives('t0_vtmd');
|
|
drop table t0_vtmd;
|
|
alter table t0 drop column y;
|
|
call check_vtmd('t0_vtmd');
|
|
|
|
call drop_archives('t0_vtmd');
|
|
set versioning_alter_history= keep;
|
|
drop tables t0, t0_vtmd;
|
|
set versioning_alter_history= survive;
|
|
|
|
# rename
|
|
set versioning_alter_history= keep;
|
|
create or replace table x0 (x int) with system versioning;
|
|
set versioning_alter_history= survive;
|
|
rename table x0 to d0;
|
|
show tables;
|
|
|
|
set versioning_alter_history= keep;
|
|
drop table d0;
|
|
set versioning_alter_history= survive;
|
|
create or replace table x0 (x int) with system versioning;
|
|
rename table x0 to d0;
|
|
show tables;
|
|
call check_vtmd('d0_vtmd');
|
|
|
|
set versioning_alter_history= keep;
|
|
drop table d0;
|
|
set versioning_alter_history= survive;
|
|
create or replace table x0 (x int) with system versioning;
|
|
|
|
--error ER_VERS_VTMD_ERROR
|
|
rename table x0 to d0;
|
|
show tables;
|
|
|
|
drop table x0_vtmd;
|
|
rename table x0 to d0;
|
|
show tables;
|
|
|
|
rename table d0 to duck;
|
|
rename table duck to bay;
|
|
rename table bay to sheer;
|
|
rename table sheer to t0;
|
|
call check_vtmd('t0_vtmd');
|
|
|
|
alter table t0 add column (y int);
|
|
call check_vtmd('t0_vtmd');
|
|
|
|
# rename to different schema
|
|
alter table t0 add column (z int);
|
|
alter table t0 drop column y;
|
|
alter table t0 drop column z;
|
|
|
|
create database db0;
|
|
rename table t0 to db0.t0;
|
|
show tables;
|
|
use db0;
|
|
show tables;
|
|
call test.check_vtmd('db0.t0_vtmd');
|
|
|
|
create database db1;
|
|
rename table t0 to db1.other_name;
|
|
show tables;
|
|
use db1;
|
|
show tables;
|
|
call test.check_vtmd('db1.other_name_vtmd');
|
|
|
|
# alter rename
|
|
alter table other_name rename to t1;
|
|
call test.check_vtmd('db1.t1_vtmd');
|
|
|
|
# alter rename and modify to different schema
|
|
alter table t1 rename to test.t2, add column (y int);
|
|
use test;
|
|
show tables;
|
|
call check_vtmd('t2_vtmd');
|
|
|
|
create or replace table t3 (x int) with system versioning;
|
|
alter table t3 change x x bigint;
|
|
alter table t3 change x x bigint after sys_trx_start;
|
|
call check_vtmd('t3_vtmd');
|
|
|
|
# hide archive tables
|
|
set versioning_hide= auto;
|
|
call show_tables();
|
|
|
|
set versioning_hide= implicit;
|
|
call show_tables();
|
|
|
|
set versioning_hide= full;
|
|
call show_tables();
|
|
|
|
set versioning_hide= never;
|
|
--replace_regex /\d{8}_\d{6}_\d{6}/TIMESTAMP_SUFFIX/
|
|
call show_tables();
|
|
|
|
# wrong VTMD handling
|
|
set versioning_hide= auto;
|
|
create or replace table u0_vtmd (x int) with system versioning;
|
|
show tables;
|
|
|
|
set versioning_alter_history= survive;
|
|
create or replace table t (x int) with system versioning;
|
|
select * from t for system_time all;
|
|
|
|
drop database db0;
|
|
drop database db1;
|
|
drop database test;
|
|
create database test;
|