mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
IB: CASCADE operation for DELETE
* Removed "Not supported for TIMESTAMP-based" error * Fixed code duplication with node->vers_set_fields() * Recovered foreign.test [closes tempesta-tech#473]
This commit is contained in:
committed by
Eugene Kosov
parent
85ddd9e8ce
commit
0cf97ad5b9
@@ -6,8 +6,8 @@ id int unique key
|
||||
) engine innodb;
|
||||
create table child(
|
||||
parent_id int,
|
||||
sys_start timestamp(6) as row start invisible,
|
||||
sys_end timestamp(6) as row end invisible,
|
||||
sys_start SYS_DATATYPE as row start invisible,
|
||||
sys_end SYS_DATATYPE as row end invisible,
|
||||
period for system_time(sys_start, sys_end),
|
||||
foreign key(parent_id) references parent(id)
|
||||
on delete restrict
|
||||
@@ -25,7 +25,7 @@ update parent set id=id+1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`))
|
||||
delete from child;
|
||||
update parent set id=id+1;
|
||||
select * from child for system_time from timestamp 0 to timestamp now(6);
|
||||
select * from child for system_time all;
|
||||
parent_id
|
||||
1
|
||||
1
|
||||
@@ -39,8 +39,8 @@ id int(10) unsigned unique key
|
||||
) engine innodb;
|
||||
create table child(
|
||||
parent_id int(10) unsigned primary key,
|
||||
sys_start timestamp(6) as row start invisible,
|
||||
sys_end timestamp(6) as row end invisible,
|
||||
sys_start SYS_DATATYPE as row start invisible,
|
||||
sys_end SYS_DATATYPE as row end invisible,
|
||||
period for system_time(sys_start, sys_end),
|
||||
foreign key(parent_id) references parent(id)
|
||||
) engine innodb with system versioning;
|
||||
@@ -58,19 +58,37 @@ id int unique key
|
||||
) engine innodb;
|
||||
create table child(
|
||||
parent_id int,
|
||||
sys_start timestamp(6) as row start invisible,
|
||||
sys_end timestamp(6) as row end invisible,
|
||||
sys_start SYS_DATATYPE as row start invisible,
|
||||
sys_end SYS_DATATYPE as row end invisible,
|
||||
period for system_time(sys_start, sys_end),
|
||||
foreign key(parent_id) references parent(id)
|
||||
on delete cascade
|
||||
on update cascade
|
||||
) engine innodb with system versioning;
|
||||
ERROR HY000: CASCADE is not supported for TIMESTAMP(6) AS ROW START/END system-versioned tables
|
||||
insert into parent values(1);
|
||||
insert into child values(1);
|
||||
delete from parent where id = 1;
|
||||
select * from child;
|
||||
parent_id
|
||||
select * from child for system_time all;
|
||||
parent_id
|
||||
1
|
||||
insert into parent values(1);
|
||||
insert into child values(1);
|
||||
update parent set id = id + 1;
|
||||
select * from child;
|
||||
parent_id
|
||||
2
|
||||
select * from child for system_time all;
|
||||
parent_id
|
||||
1
|
||||
2
|
||||
drop table child;
|
||||
drop table parent;
|
||||
create or replace table parent (
|
||||
id int primary key,
|
||||
sys_start timestamp(6) as row start invisible,
|
||||
sys_end timestamp(6) as row end invisible,
|
||||
sys_start SYS_DATATYPE as row start invisible,
|
||||
sys_end SYS_DATATYPE as row end invisible,
|
||||
period for system_time(sys_start, sys_end)
|
||||
) with system versioning
|
||||
engine innodb;
|
||||
@@ -97,8 +115,8 @@ engine innodb;
|
||||
create or replace table child (
|
||||
id int primary key,
|
||||
parent_id int not null,
|
||||
row_start timestamp(6) as row start invisible,
|
||||
row_end timestamp(6) as row end invisible,
|
||||
row_start SYS_DATATYPE as row start invisible,
|
||||
row_end SYS_DATATYPE as row end invisible,
|
||||
period for system_time(row_start, row_end),
|
||||
constraint `parent-fk`
|
||||
foreign key (parent_id) references parent (id)
|
||||
@@ -106,32 +124,64 @@ on delete cascade
|
||||
on update restrict
|
||||
) with system versioning
|
||||
engine innodb;
|
||||
ERROR HY000: CASCADE is not supported for TIMESTAMP(6) AS ROW START/END system-versioned tables
|
||||
insert into parent (id) values (3);
|
||||
insert into child (id, parent_id) values (3, 3);
|
||||
delete from parent;
|
||||
select * from child;
|
||||
id parent_id
|
||||
select *, check_row(row_start, row_end) from child for system_time all;
|
||||
id parent_id check_row(row_start, row_end)
|
||||
3 3 HISTORICAL ROW
|
||||
drop table child;
|
||||
drop table parent;
|
||||
#################
|
||||
# Test SET NULL #
|
||||
#################
|
||||
create table parent(
|
||||
create or replace table parent(
|
||||
id int unique key
|
||||
) engine innodb;
|
||||
create table child(
|
||||
create or replace table child(
|
||||
parent_id int,
|
||||
sys_start timestamp(6) as row start invisible,
|
||||
sys_end timestamp(6) as row end invisible,
|
||||
sys_start SYS_DATATYPE as row start invisible,
|
||||
sys_end SYS_DATATYPE as row end invisible,
|
||||
period for system_time(sys_start, sys_end),
|
||||
foreign key(parent_id) references parent(id)
|
||||
on delete set null
|
||||
on update set null
|
||||
) engine innodb with system versioning;
|
||||
ERROR HY000: SET NULL is not supported for TIMESTAMP(6) AS ROW START/END system-versioned tables
|
||||
insert into parent values(1);
|
||||
insert into child values(1);
|
||||
delete from child;
|
||||
insert into child values(1);
|
||||
delete from parent where id = 1;
|
||||
select * from child;
|
||||
parent_id
|
||||
NULL
|
||||
select *, current_row(sys_end) as current_row from child for system_time all order by sys_end;
|
||||
parent_id current_row
|
||||
1 0
|
||||
NULL 1
|
||||
delete from child;
|
||||
insert into parent values(1);
|
||||
insert into child values(1);
|
||||
update parent set id= id + 1;
|
||||
select * from child;
|
||||
parent_id
|
||||
NULL
|
||||
select *, current_row(sys_end) as current_row from child for system_time all order by sys_end;
|
||||
parent_id current_row
|
||||
1 0
|
||||
NULL 0
|
||||
NULL 1
|
||||
drop table child;
|
||||
drop table parent;
|
||||
###########################
|
||||
# Parent table is foreign #
|
||||
###########################
|
||||
create or replace table parent(
|
||||
id int unique key,
|
||||
sys_start timestamp(6) as row start invisible,
|
||||
sys_end timestamp(6) as row end invisible,
|
||||
sys_start SYS_DATATYPE as row start invisible,
|
||||
sys_end SYS_DATATYPE as row end invisible,
|
||||
period for system_time(sys_start, sys_end)
|
||||
) engine innodb with system versioning;
|
||||
create or replace table child(
|
||||
@@ -162,16 +212,16 @@ drop table parent;
|
||||
create or replace table a (
|
||||
cola int(10) primary key,
|
||||
v_cola int(10) as (cola mod 10) virtual,
|
||||
sys_start timestamp(6) as row start invisible,
|
||||
sys_end timestamp(6) as row end invisible,
|
||||
sys_start SYS_DATATYPE as row start invisible,
|
||||
sys_end SYS_DATATYPE as row end invisible,
|
||||
period for system_time(sys_start, sys_end)
|
||||
) engine=innodb with system versioning;
|
||||
create index v_cola on a (v_cola);
|
||||
create or replace table b(
|
||||
cola int(10),
|
||||
v_cola int(10),
|
||||
sys_start timestamp(6) as row start invisible,
|
||||
sys_end timestamp(6) as row end invisible,
|
||||
sys_start SYS_DATATYPE as row start invisible,
|
||||
sys_end SYS_DATATYPE as row end invisible,
|
||||
period for system_time(sys_start, sys_end)
|
||||
) engine=innodb with system versioning;
|
||||
alter table b add constraint `v_cola_fk`
|
||||
|
Reference in New Issue
Block a user