summaryrefslogtreecommitdiff
path: root/mysql-test/suite/versioning/r/foreign.result
diff options
context:
space:
mode:
authorAleksey Midenkov <midenok@gmail.com>2020-12-22 03:33:53 +0300
committerAleksey Midenkov <midenok@gmail.com>2020-12-22 03:33:53 +0300
commit932ec586aada4bd78f613ee10750effc7f442327 (patch)
tree73aaf2afffb3a43ff7115fd40a21c99c50075662 /mysql-test/suite/versioning/r/foreign.result
parent7410ff436e95de09c2f3f0028e7af8b3a043028b (diff)
downloadmariadb-git-932ec586aada4bd78f613ee10750effc7f442327.tar.gz
MDEV-23644 Assertion on evaluating foreign referential action for self-reference in system versioned table
First part of the fix (row0mysql.cc) addresses external columns when adding history row on referential action. The full data must be retrieved before the row is inserted. Second part of the fix (the rest) avoids duplicate primary key error between the history row generated on referential action and the history row generated by SQL command. Both command and referential action can happen on same table since foreign key can be self-reference (parent and child tables are same). Moreover, the self-reference can refer multiple rows when the key is non-unique. In such case history is generated by referential action occured on first row but processed all rows by a matched key. The second round is when the next row is processed by a command but history already exists. In such case we check TRX_ID of existing history row and if it is the same we assume the above situation and skip adding one more history row or failing the command.
Diffstat (limited to 'mysql-test/suite/versioning/r/foreign.result')
-rw-r--r--mysql-test/suite/versioning/r/foreign.result16
1 files changed, 16 insertions, 0 deletions
diff --git a/mysql-test/suite/versioning/r/foreign.result b/mysql-test/suite/versioning/r/foreign.result
index 32b5e5cf3d8..e54afdbc74e 100644
--- a/mysql-test/suite/versioning/r/foreign.result
+++ b/mysql-test/suite/versioning/r/foreign.result
@@ -398,6 +398,8 @@ Warning 1265 Data truncated for column 'f12' at row 7
SET timestamp = 9;
REPLACE INTO t2 SELECT * FROM t2;
DROP TABLE t1, t2;
+set timestamp= default;
+set time_zone='+00:00';
#
# MDEV-16210 FK constraints on versioned tables use historical rows, which may cause constraint violation
#
@@ -427,3 +429,17 @@ insert into t2 values (1), (1);
# DELETE from foreign table is allowed
delete from t2;
drop tables t2, t1;
+#
+# MDEV-23644 Assertion on evaluating foreign referential action for self-reference in system versioned table
+#
+create table t1 (pk int primary key, f1 int,f2 int, f3 text,
+key(f1), fulltext(f3), key(f3(10)),
+foreign key (f2) references t1 (f1) on delete set null
+) engine=innodb with system versioning;
+insert into t1 values (1, 8, 8, 'SHORT'), (2, 8, 8, repeat('LONG', 8071));
+delete from t1;
+select pk, f1, f2, left(f3, 4), check_row_ts(row_start, row_end) from t1 for system_time all order by pk;
+pk f1 f2 left(f3, 4) check_row_ts(row_start, row_end)
+1 8 8 SHOR HISTORICAL ROW
+2 8 8 LONG HISTORICAL ROW
+drop table t1;