Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
485325e7
Commit
485325e7
authored
Feb 23, 2018
by
Sergei Golubchik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
don't allow TIMESTAMP(6) versioning and FK with CASCADE or SET NULL
parent
794f71cb
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
236 additions
and
119 deletions
+236
-119
mysql-test/suite/versioning/r/foreign,trx_id.rdiff
mysql-test/suite/versioning/r/foreign,trx_id.rdiff
+166
-0
mysql-test/suite/versioning/r/foreign.result
mysql-test/suite/versioning/r/foreign.result
+21
-73
mysql-test/suite/versioning/r/simple.result
mysql-test/suite/versioning/r/simple.result
+1
-1
mysql-test/suite/versioning/t/foreign.test
mysql-test/suite/versioning/t/foreign.test
+12
-14
mysql-test/suite/versioning/t/simple.test
mysql-test/suite/versioning/t/simple.test
+1
-1
sql/handler.cc
sql/handler.cc
+12
-14
sql/handler.h
sql/handler.h
+10
-1
sql/sql_table.cc
sql/sql_table.cc
+13
-0
sql/table.h
sql/table.h
+0
-7
storage/innobase/row/row0mysql.cc
storage/innobase/row/row0mysql.cc
+0
-8
No files found.
mysql-test/suite/versioning/r/foreign,trx_id.rdiff
0 → 100644
View file @
485325e7
--- suite/versioning/r/foreign.result
+++ suite/versioning/r/foreign,trx_id.reject
@@ -6,8 +6,8 @@
) 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 bigint(20) unsigned as row start invisible,
+sys_end bigint(20) unsigned as row end invisible,
period for system_time(sys_start, sys_end),
foreign key(parent_id) references parent(id)
on delete restrict
@@ -39,8 +39,8 @@
) 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 bigint(20) unsigned as row start invisible,
+sys_end bigint(20) unsigned 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,39 @@
) 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 bigint(20) unsigned as row start invisible,
+sys_end bigint(20) unsigned 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;
+delete from child where parent_id = 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 bigint(20) unsigned as row start invisible,
+sys_end bigint(20) unsigned as row end invisible,
period for system_time(sys_start, sys_end)
) with system versioning
engine innodb;
@@ -97,8 +117,8 @@
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 bigint(20) unsigned as row start invisible,
+row_end bigint(20) unsigned as row end invisible,
period for system_time(row_start, row_end),
constraint `parent-fk`
foreign key (parent_id) references parent (id)
@@ -106,7 +126,18 @@
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);
+## FIXME: #415 update of foreign constraints is disabled
+delete from child;
+## FIXME END
+delete from parent;
+select * from child;
+id parent_id
+select *, row_start < row_end, row_end < MAXVAL from child for system_time all;
+id parent_id row_start < row_end row_end < MAXVAL
+3 3 1 1
+drop table child;
drop table parent;
#################
# Test SET NULL #
@@ -116,22 +147,39 @@
) 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 bigint(20) unsigned as row start invisible,
+sys_end bigint(20) unsigned 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);
+## FIXME: #415 update of foreign constraints is disabled
+delete from child where parent_id = 1;
+## FIXME END
+delete from parent where id = 1;
+select * from child;
+parent_id
+select * from child for system_time from timestamp 0 to timestamp now(6);
+parent_id
+1
+1
+delete from child;
+insert into parent values(1);
+insert into child values(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 bigint(20) unsigned as row start invisible,
+sys_end bigint(20) unsigned as row end invisible,
period for system_time(sys_start, sys_end)
) engine innodb with system versioning;
create or replace table child(
@@ -162,16 +210,16 @@
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 bigint(20) unsigned as row start invisible,
+sys_end bigint(20) unsigned 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 bigint(20) unsigned as row start invisible,
+sys_end bigint(20) unsigned 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`
mysql-test/suite/versioning/r/foreign.result
View file @
485325e7
...
@@ -6,8 +6,8 @@ id int unique key
...
@@ -6,8 +6,8 @@ id int unique key
) engine innodb;
) engine innodb;
create table child(
create table child(
parent_id int,
parent_id int,
sys_start
SYS_DATATYPE
as row start invisible,
sys_start
timestamp(6)
as row start invisible,
sys_end
SYS_DATATYPE
as row end invisible,
sys_end
timestamp(6)
as row end invisible,
period for system_time(sys_start, sys_end),
period for system_time(sys_start, sys_end),
foreign key(parent_id) references parent(id)
foreign key(parent_id) references parent(id)
on delete restrict
on delete restrict
...
@@ -39,8 +39,8 @@ id int(10) unsigned unique key
...
@@ -39,8 +39,8 @@ id int(10) unsigned unique key
) engine innodb;
) engine innodb;
create table child(
create table child(
parent_id int(10) unsigned primary key,
parent_id int(10) unsigned primary key,
sys_start
SYS_DATATYPE
as row start invisible,
sys_start
timestamp(6)
as row start invisible,
sys_end
SYS_DATATYPE
as row end invisible,
sys_end
timestamp(6)
as row end invisible,
period for system_time(sys_start, sys_end),
period for system_time(sys_start, sys_end),
foreign key(parent_id) references parent(id)
foreign key(parent_id) references parent(id)
) engine innodb with system versioning;
) engine innodb with system versioning;
...
@@ -58,43 +58,19 @@ id int unique key
...
@@ -58,43 +58,19 @@ id int unique key
) engine innodb;
) engine innodb;
create table child(
create table child(
parent_id int,
parent_id int,
sys_start
SYS_DATATYPE
as row start invisible,
sys_start
timestamp(6)
as row start invisible,
sys_end
SYS_DATATYPE
as row end invisible,
sys_end
timestamp(6)
as row end invisible,
period for system_time(sys_start, sys_end),
period for system_time(sys_start, sys_end),
foreign key(parent_id) references parent(id)
foreign key(parent_id) references parent(id)
on delete cascade
on delete cascade
on update cascade
on update cascade
) engine innodb with system versioning;
) engine innodb with system versioning;
insert into parent values(1);
ERROR HY000: CASCADE is not supported for TIMESTAMP(6) AS ROW START/END system-versioned tables
insert into child values(1);
## FIXME: #415 update of foreign constraints is disabled
call mtr.add_suppression("foreign key constraints in timestamp-based temporal table");
delete from parent where id = 1;
ERROR 42000: Table 'parent' uses an extension that doesn't exist in this MariaDB version
delete from child where parent_id = 1;
## FIXME END
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;
drop table parent;
create or replace table parent (
create or replace table parent (
id int primary key,
id int primary key,
sys_start
SYS_DATATYPE
as row start invisible,
sys_start
timestamp(6)
as row start invisible,
sys_end
SYS_DATATYPE
as row end invisible,
sys_end
timestamp(6)
as row end invisible,
period for system_time(sys_start, sys_end)
period for system_time(sys_start, sys_end)
) with system versioning
) with system versioning
engine innodb;
engine innodb;
...
@@ -121,8 +97,8 @@ engine innodb;
...
@@ -121,8 +97,8 @@ engine innodb;
create or replace table child (
create or replace table child (
id int primary key,
id int primary key,
parent_id int not null,
parent_id int not null,
row_start
SYS_DATATYPE
as row start invisible,
row_start
timestamp(6)
as row start invisible,
row_end
SYS_DATATYPE
as row end invisible,
row_end
timestamp(6)
as row end invisible,
period for system_time(row_start, row_end),
period for system_time(row_start, row_end),
constraint `parent-fk`
constraint `parent-fk`
foreign key (parent_id) references parent (id)
foreign key (parent_id) references parent (id)
...
@@ -130,18 +106,7 @@ on delete cascade
...
@@ -130,18 +106,7 @@ on delete cascade
on update restrict
on update restrict
) with system versioning
) with system versioning
engine innodb;
engine innodb;
insert into parent (id) values (3);
ERROR HY000: CASCADE is not supported for TIMESTAMP(6) AS ROW START/END system-versioned tables
insert into child (id, parent_id) values (3, 3);
## FIXME: #415 update of foreign constraints is disabled
delete from child;
## FIXME END
delete from parent;
select * from child;
id parent_id
select *, row_start < row_end, row_end < MAXVAL from child for system_time all;
id parent_id row_start < row_end row_end < MAXVAL
3 3 1 1
drop table child;
drop table parent;
drop table parent;
#################
#################
# Test SET NULL #
# Test SET NULL #
...
@@ -151,39 +116,22 @@ id int unique key
...
@@ -151,39 +116,22 @@ id int unique key
) engine innodb;
) engine innodb;
create table child(
create table child(
parent_id int,
parent_id int,
sys_start
SYS_DATATYPE
as row start invisible,
sys_start
timestamp(6)
as row start invisible,
sys_end
SYS_DATATYPE
as row end invisible,
sys_end
timestamp(6)
as row end invisible,
period for system_time(sys_start, sys_end),
period for system_time(sys_start, sys_end),
foreign key(parent_id) references parent(id)
foreign key(parent_id) references parent(id)
on delete set null
on delete set null
on update set null
on update set null
) engine innodb with system versioning;
) engine innodb with system versioning;
insert into parent values(1);
ERROR HY000: SET NULL is not supported for TIMESTAMP(6) AS ROW START/END system-versioned tables
insert into child values(1);
delete from child;
insert into child values(1);
## FIXME: #415 update of foreign constraints is disabled
delete from child where parent_id = 1;
## FIXME END
delete from parent where id = 1;
select * from child;
parent_id
select * from child for system_time from timestamp 0 to timestamp now(6);
parent_id
1
1
delete from child;
insert into parent values(1);
insert into child values(1);
drop table child;
drop table parent;
drop table parent;
###########################
###########################
# Parent table is foreign #
# Parent table is foreign #
###########################
###########################
create or replace table parent(
create or replace table parent(
id int unique key,
id int unique key,
sys_start
SYS_DATATYPE
as row start invisible,
sys_start
timestamp(6)
as row start invisible,
sys_end
SYS_DATATYPE
as row end invisible,
sys_end
timestamp(6)
as row end invisible,
period for system_time(sys_start, sys_end)
period for system_time(sys_start, sys_end)
) engine innodb with system versioning;
) engine innodb with system versioning;
create or replace table child(
create or replace table child(
...
@@ -214,16 +162,16 @@ drop table parent;
...
@@ -214,16 +162,16 @@ drop table parent;
create or replace table a (
create or replace table a (
cola int(10) primary key,
cola int(10) primary key,
v_cola int(10) as (cola mod 10) virtual,
v_cola int(10) as (cola mod 10) virtual,
sys_start
SYS_DATATYPE
as row start invisible,
sys_start
timestamp(6)
as row start invisible,
sys_end
SYS_DATATYPE
as row end invisible,
sys_end
timestamp(6)
as row end invisible,
period for system_time(sys_start, sys_end)
period for system_time(sys_start, sys_end)
) engine=innodb with system versioning;
) engine=innodb with system versioning;
create index v_cola on a (v_cola);
create index v_cola on a (v_cola);
create or replace table b(
create or replace table b(
cola int(10),
cola int(10),
v_cola int(10),
v_cola int(10),
sys_start
SYS_DATATYPE
as row start invisible,
sys_start
timestamp(6)
as row start invisible,
sys_end
SYS_DATATYPE
as row end invisible,
sys_end
timestamp(6)
as row end invisible,
period for system_time(sys_start, sys_end)
period for system_time(sys_start, sys_end)
) engine=innodb with system versioning;
) engine=innodb with system versioning;
alter table b add constraint `v_cola_fk`
alter table b add constraint `v_cola_fk`
...
...
mysql-test/suite/versioning/r/simple.result
View file @
485325e7
...
@@ -11,7 +11,7 @@ name varchar(100),
...
@@ -11,7 +11,7 @@ name varchar(100),
salary int(10),
salary int(10),
constraint `dept-emp-fk`
constraint `dept-emp-fk`
foreign key (dept_id) references dept (dept_id)
foreign key (dept_id) references dept (dept_id)
on delete
cascade
on delete
restrict
on update restrict
on update restrict
)
)
with system versioning;
with system versioning;
...
...
mysql-test/suite/versioning/t/foreign.test
View file @
485325e7
...
@@ -8,7 +8,6 @@ create table parent(
...
@@ -8,7 +8,6 @@ create table parent(
id
int
unique
key
id
int
unique
key
)
engine
innodb
;
)
engine
innodb
;
--
replace_result
$sys_datatype_expl
SYS_DATATYPE
eval
create
table
child
(
eval
create
table
child
(
parent_id
int
,
parent_id
int
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
...
@@ -46,7 +45,6 @@ create table parent(
...
@@ -46,7 +45,6 @@ create table parent(
id
int
(
10
)
unsigned
unique
key
id
int
(
10
)
unsigned
unique
key
)
engine
innodb
;
)
engine
innodb
;
--
replace_result
$sys_datatype_expl
SYS_DATATYPE
eval
create
table
child
(
eval
create
table
child
(
parent_id
int
(
10
)
unsigned
primary
key
,
parent_id
int
(
10
)
unsigned
primary
key
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
...
@@ -72,7 +70,7 @@ create table parent(
...
@@ -72,7 +70,7 @@ create table parent(
id
int
unique
key
id
int
unique
key
)
engine
innodb
;
)
engine
innodb
;
--
replace_result
$sys_datatype_expl
SYS_DATATYPE
--
disable_abort_on_error
eval
create
table
child
(
eval
create
table
child
(
parent_id
int
,
parent_id
int
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
...
@@ -82,16 +80,14 @@ eval create table child(
...
@@ -82,16 +80,14 @@ eval create table child(
on
delete
cascade
on
delete
cascade
on
update
cascade
on
update
cascade
)
engine
innodb
with
system
versioning
;
)
engine
innodb
with
system
versioning
;
--
enable_abort_on_error
if
(
$MTR_COMBINATION_TRX_ID
)
{
insert
into
parent
values
(
1
);
insert
into
parent
values
(
1
);
insert
into
child
values
(
1
);
insert
into
child
values
(
1
);
--
echo
## FIXME: #415 update of foreign constraints is disabled
call
mtr
.
add_suppression
(
"foreign key constraints in timestamp-based temporal table"
);
--
error
ER_UNSUPPORTED_EXTENSION
delete
from
parent
where
id
=
1
;
delete
from
parent
where
id
=
1
;
delete
from
child
where
parent_id
=
1
;
delete
from
child
where
parent_id
=
1
;
--
echo
## FIXME END
delete
from
parent
where
id
=
1
;
delete
from
parent
where
id
=
1
;
select
*
from
child
;
select
*
from
child
;
select
*
from
child
for
system_time
all
;
select
*
from
child
for
system_time
all
;
...
@@ -103,9 +99,8 @@ select * from child;
...
@@ -103,9 +99,8 @@ select * from child;
select
*
from
child
for
system_time
all
;
select
*
from
child
for
system_time
all
;
drop
table
child
;
drop
table
child
;
}
drop
table
parent
;
drop
table
parent
;
--
replace_result
$sys_datatype_expl
SYS_DATATYPE
eval
create
or
replace
table
parent
(
eval
create
or
replace
table
parent
(
id
int
primary
key
,
id
int
primary
key
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
...
@@ -137,7 +132,7 @@ create or replace table parent (
...
@@ -137,7 +132,7 @@ create or replace table parent (
)
)
engine
innodb
;
engine
innodb
;
--
replace_result
$sys_datatype_expl
SYS_DATATYPE
--
disable_abort_on_error
eval
create
or
replace
table
child
(
eval
create
or
replace
table
child
(
id
int
primary
key
,
id
int
primary
key
,
parent_id
int
not
null
,
parent_id
int
not
null
,
...
@@ -150,7 +145,9 @@ eval create or replace table child (
...
@@ -150,7 +145,9 @@ eval create or replace table child (
on
update
restrict
on
update
restrict
)
with
system
versioning
)
with
system
versioning
engine
innodb
;
engine
innodb
;
--
enable_abort_on_error
if
(
$MTR_COMBINATION_TRX_ID
)
{
insert
into
parent
(
id
)
values
(
3
);
insert
into
parent
(
id
)
values
(
3
);
insert
into
child
(
id
,
parent_id
)
values
(
3
,
3
);
insert
into
child
(
id
,
parent_id
)
values
(
3
,
3
);
--
echo
## FIXME: #415 update of foreign constraints is disabled
--
echo
## FIXME: #415 update of foreign constraints is disabled
...
@@ -162,6 +159,7 @@ select * from child;
...
@@ -162,6 +159,7 @@ select * from child;
eval
select
*
,
row_start
<
row_end
,
row_end
<
$sys_datatype_max
from
child
for
system_time
all
;
eval
select
*
,
row_start
<
row_end
,
row_end
<
$sys_datatype_max
from
child
for
system_time
all
;
drop
table
child
;
drop
table
child
;
}
drop
table
parent
;
drop
table
parent
;
--
echo
#################
--
echo
#################
...
@@ -172,7 +170,7 @@ create table parent(
...
@@ -172,7 +170,7 @@ create table parent(
id
int
unique
key
id
int
unique
key
)
engine
innodb
;
)
engine
innodb
;
--
replace_result
$sys_datatype_expl
SYS_DATATYPE
--
disable_abort_on_error
eval
create
table
child
(
eval
create
table
child
(
parent_id
int
,
parent_id
int
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
...
@@ -182,7 +180,9 @@ eval create table child(
...
@@ -182,7 +180,9 @@ eval create table child(
on
delete
set
null
on
delete
set
null
on
update
set
null
on
update
set
null
)
engine
innodb
with
system
versioning
;
)
engine
innodb
with
system
versioning
;
--
enable_abort_on_error
if
(
$MTR_COMBINATION_TRX_ID
)
{
insert
into
parent
values
(
1
);
insert
into
parent
values
(
1
);
insert
into
child
values
(
1
);
insert
into
child
values
(
1
);
delete
from
child
;
delete
from
child
;
...
@@ -208,13 +208,13 @@ select * from child for system_time from timestamp 0 to timestamp now(6);
...
@@ -208,13 +208,13 @@ select * from child for system_time from timestamp 0 to timestamp now(6);
## FIXME END
## FIXME END
drop
table
child
;
drop
table
child
;
}
drop
table
parent
;
drop
table
parent
;
--
echo
###########################
--
echo
###########################
--
echo
# Parent table is foreign #
--
echo
# Parent table is foreign #
--
echo
###########################
--
echo
###########################
--
replace_result
$sys_datatype_expl
SYS_DATATYPE
eval
create
or
replace
table
parent
(
eval
create
or
replace
table
parent
(
id
int
unique
key
,
id
int
unique
key
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
sys_start
$sys_datatype_expl
as
row
start
invisible
,
...
@@ -254,7 +254,6 @@ drop table parent;
...
@@ -254,7 +254,6 @@ drop table parent;
--
echo
# crash on DELETE #
--
echo
# crash on DELETE #
--
echo
###################
--
echo
###################
--
replace_result
$sys_datatype_expl
SYS_DATATYPE
eval
create
or
replace
table
a
(
eval
create
or
replace
table
a
(
cola
int
(
10
)
primary
key
,
cola
int
(
10
)
primary
key
,
v_cola
int
(
10
)
as
(
cola
mod
10
)
virtual
,
v_cola
int
(
10
)
as
(
cola
mod
10
)
virtual
,
...
@@ -265,7 +264,6 @@ eval create or replace table a (
...
@@ -265,7 +264,6 @@ eval create or replace table a (
create
index
v_cola
on
a
(
v_cola
);
create
index
v_cola
on
a
(
v_cola
);
--
replace_result
$sys_datatype_expl
SYS_DATATYPE
eval
create
or
replace
table
b
(
eval
create
or
replace
table
b
(
cola
int
(
10
),
cola
int
(
10
),
v_cola
int
(
10
),
v_cola
int
(
10
),
...
...
mysql-test/suite/versioning/t/simple.test
View file @
485325e7
...
@@ -13,7 +13,7 @@ create or replace table emp (
...
@@ -13,7 +13,7 @@ create or replace table emp (
salary
int
(
10
),
salary
int
(
10
),
constraint
`dept-emp-fk`
constraint
`dept-emp-fk`
foreign
key
(
dept_id
)
references
dept
(
dept_id
)
foreign
key
(
dept_id
)
references
dept
(
dept_id
)
on
delete
cascade
on
delete
restrict
on
update
restrict
on
update
restrict
)
)
with
system
versioning
;
with
system
versioning
;
...
...
sql/handler.cc
View file @
485325e7
...
@@ -7343,15 +7343,13 @@ bool Vers_parse_info::check_with_conditions(const char *table_name) const
...
@@ -7343,15 +7343,13 @@ bool Vers_parse_info::check_with_conditions(const char *table_name) const
}
}
bool
Vers_parse_info
::
check_sys_fields
(
const
char
*
table_name
,
bool
Vers_parse_info
::
check_sys_fields
(
const
char
*
table_name
,
Alter_info
*
alter_info
,
Alter_info
*
alter_info
,
bool
native
)
bool
native
)
const
{
{
List_iterator
<
Create_field
>
it
(
alter_info
->
create_list
);
List_iterator
<
Create_field
>
it
(
alter_info
->
create_list
);
vers_sys_type_t
found
=
VERS_UNDEFINED
;
uint
found_flag
=
0
;
uint
found_flag
=
0
;
while
(
Create_field
*
f
=
it
++
)
while
(
Create_field
*
f
=
it
++
)
{
{
vers_sys_type_t
check_unit
=
VERS_UNDEFINED
;
vers_sys_type_t
f_
check_unit
=
VERS_UNDEFINED
;
uint
sys_flag
=
f
->
flags
&
VERS_SYSTEM_FIELD
;
uint
sys_flag
=
f
->
flags
&
VERS_SYSTEM_FIELD
;
if
(
!
sys_flag
)
if
(
!
sys_flag
)
...
@@ -7371,29 +7369,29 @@ bool Vers_parse_info::check_sys_fields(const char *table_name,
...
@@ -7371,29 +7369,29 @@ bool Vers_parse_info::check_sys_fields(const char *table_name,
f
->
type_handler
()
==
&
type_handler_timestamp2
)
&&
f
->
type_handler
()
==
&
type_handler_timestamp2
)
&&
f
->
length
==
MAX_DATETIME_FULL_WIDTH
)
f
->
length
==
MAX_DATETIME_FULL_WIDTH
)
{
{
check_unit
=
VERS_TIMESTAMP
;
f_
check_unit
=
VERS_TIMESTAMP
;
}
}
else
if
(
native
else
if
(
native
&&
f
->
type_handler
()
==
&
type_handler_longlong
&&
f
->
type_handler
()
==
&
type_handler_longlong
&&
(
f
->
flags
&
UNSIGNED_FLAG
)
&&
(
f
->
flags
&
UNSIGNED_FLAG
)
&&
f
->
length
==
(
MY_INT64_NUM_DECIMAL_DIGITS
-
1
))
&&
f
->
length
==
(
MY_INT64_NUM_DECIMAL_DIGITS
-
1
))
{
{
check_unit
=
VERS_TRX_ID
;
f_
check_unit
=
VERS_TRX_ID
;
}
}
else
else
{
{
if
(
!
found
)
if
(
!
check_unit
)
found
=
VERS_TIMESTAMP
;
check_unit
=
VERS_TIMESTAMP
;
goto
error
;
goto
error
;
}
}
if
(
check_unit
)
if
(
f_
check_unit
)
{
{
if
(
found
)
if
(
check_unit
)
{
{
if
(
found
==
check_unit
)
if
(
check_unit
==
f_
check_unit
)
{
{
if
(
found
==
VERS_TRX_ID
&&
!
TR_table
::
use_transaction_registry
)
if
(
check_unit
==
VERS_TRX_ID
&&
!
TR_table
::
use_transaction_registry
)
{
{
my_error
(
ER_VERS_TRT_IS_DISABLED
,
MYF
(
0
));
my_error
(
ER_VERS_TRT_IS_DISABLED
,
MYF
(
0
));
return
true
;
return
true
;
...
@@ -7402,13 +7400,13 @@ bool Vers_parse_info::check_sys_fields(const char *table_name,
...
@@ -7402,13 +7400,13 @@ bool Vers_parse_info::check_sys_fields(const char *table_name,
}
}
error:
error:
my_error
(
ER_VERS_FIELD_WRONG_TYPE
,
MYF
(
0
),
f
->
field_name
.
str
,
my_error
(
ER_VERS_FIELD_WRONG_TYPE
,
MYF
(
0
),
f
->
field_name
.
str
,
found
==
VERS_TIMESTAMP
?
check_unit
==
VERS_TIMESTAMP
?
"TIMESTAMP(6)"
:
"TIMESTAMP(6)"
:
"BIGINT(20) UNSIGNED"
,
"BIGINT(20) UNSIGNED"
,
table_name
);
table_name
);
return
true
;
return
true
;
}
}
found
=
check_unit
;
check_unit
=
f_
check_unit
;
}
}
}
}
...
...
sql/handler.h
View file @
485325e7
...
@@ -1722,9 +1722,17 @@ struct Schema_specification_st
...
@@ -1722,9 +1722,17 @@ struct Schema_specification_st
class
Create_field
;
class
Create_field
;
enum
vers_sys_type_t
{
VERS_UNDEFINED
=
0
,
VERS_TIMESTAMP
,
VERS_TRX_ID
};
struct
Vers_parse_info
struct
Vers_parse_info
{
{
Vers_parse_info
()
:
Vers_parse_info
()
:
check_unit
(
VERS_UNDEFINED
),
versioned_fields
(
false
),
versioned_fields
(
false
),
unversioned_fields
(
false
)
unversioned_fields
(
false
)
{}
{}
...
@@ -1742,6 +1750,7 @@ struct Vers_parse_info
...
@@ -1742,6 +1750,7 @@ struct Vers_parse_info
start_end_t
system_time
;
start_end_t
system_time
;
start_end_t
as_row
;
start_end_t
as_row
;
vers_sys_type_t
check_unit
;
void
set_system_time
(
LString
start
,
LString
end
)
void
set_system_time
(
LString
start
,
LString
end
)
{
{
...
@@ -1773,7 +1782,7 @@ struct Vers_parse_info
...
@@ -1773,7 +1782,7 @@ struct Vers_parse_info
bool
need_check
(
const
Alter_info
*
alter_info
)
const
;
bool
need_check
(
const
Alter_info
*
alter_info
)
const
;
bool
check_with_conditions
(
const
char
*
table_name
)
const
;
bool
check_with_conditions
(
const
char
*
table_name
)
const
;
bool
check_sys_fields
(
const
char
*
table_name
,
Alter_info
*
alter_info
,
bool
check_sys_fields
(
const
char
*
table_name
,
Alter_info
*
alter_info
,
bool
native
)
const
;
bool
native
);
public:
public:
static
const
LString
default_start
;
static
const
LString
default_start
;
...
...
sql/sql_table.cc
View file @
485325e7
...
@@ -4469,6 +4469,19 @@ static bool vers_prepare_keys(THD *thd, HA_CREATE_INFO *create_info,
...
@@ -4469,6 +4469,19 @@ static bool vers_prepare_keys(THD *thd, HA_CREATE_INFO *create_info,
Key
*
key
=
NULL
;
Key
*
key
=
NULL
;
while
((
key
=
key_it
++
))
while
((
key
=
key_it
++
))
{
{
if
(
key
->
type
==
Key
::
FOREIGN_KEY
&&
create_info
->
vers_info
.
check_unit
==
VERS_TIMESTAMP
)
{
Foreign_key
*
fk_key
=
(
Foreign_key
*
)
key
;
enum
enum_fk_option
op
;
if
(
fk_modifies_child
(
op
=
fk_key
->
update_opt
)
||
fk_modifies_child
(
op
=
fk_key
->
delete_opt
))
{
my_error
(
ER_VERS_NOT_SUPPORTED
,
MYF
(
0
),
fk_option_name
(
op
)
->
str
,
"TIMESTAMP(6) AS ROW START/END"
);
return
true
;
}
}
if
(
key
->
type
!=
Key
::
PRIMARY
&&
key
->
type
!=
Key
::
UNIQUE
)
if
(
key
->
type
!=
Key
::
PRIMARY
&&
key
->
type
!=
Key
::
UNIQUE
)
continue
;
continue
;
...
...
sql/table.h
View file @
485325e7
...
@@ -575,13 +575,6 @@ struct TABLE_STATISTICS_CB
...
@@ -575,13 +575,6 @@ struct TABLE_STATISTICS_CB
bool
histograms_are_read
;
bool
histograms_are_read
;
};
};
enum
vers_sys_type_t
{
VERS_UNDEFINED
=
0
,
VERS_TIMESTAMP
,
VERS_TRX_ID
};
/**
/**
This structure is shared between different table objects. There is one
This structure is shared between different table objects. There is one
instance of table share per one table in the database.
instance of table share per one table in the database.
...
...
storage/innobase/row/row0mysql.cc
View file @
485325e7
...
@@ -2199,14 +2199,6 @@ row_update_cascade_for_mysql(
...
@@ -2199,14 +2199,6 @@ row_update_cascade_for_mysql(
&&
(
node
->
is_delete
==
PLAIN_DELETE
&&
(
node
->
is_delete
==
PLAIN_DELETE
||
node
->
update
->
affects_versioned
());
||
node
->
update
->
affects_versioned
());
if
(
vers_set_fields
&&
!
thr
->
prebuilt
->
versioned_write
)
{
// FIXME: timestamp-based update of row_end in run_again
trx
->
error_state
=
DB_UNSUPPORTED
;
thr
->
fk_cascade_depth
=
0
;
return
trx
->
error_state
;
}
for
(;;)
{
for
(;;)
{
if
(
vers_set_fields
)
{
if
(
vers_set_fields
)
{
// FIXME: code duplication with row_update_for_mysql()
// FIXME: code duplication with row_update_for_mysql()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment