mirror of
https://github.com/MariaDB/server.git
synced 2025-08-21 16:03:24 +03:00
205 lines
5.1 KiB
Plaintext
205 lines
5.1 KiB
Plaintext
-- source include/have_innodb.inc
|
|
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;
|