mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-29813 REPLACE/IGNORE does not work with historical records in InnoDB
note that replace no longer supports system_versioning_insert_history, the test case is only for ignore
This commit is contained in:
@@ -295,3 +295,27 @@ ERROR 42000: Access denied; you need (at least one of) the SUPER, BINLOG REPLAY
|
|||||||
use test;
|
use test;
|
||||||
# restart: --secure-timestamp=NO
|
# restart: --secure-timestamp=NO
|
||||||
drop tables t1, t2, t3;
|
drop tables t1, t2, t3;
|
||||||
|
#
|
||||||
|
# MDEV-29813 REPLACE/IGNORE does not work with historical records in InnoDB
|
||||||
|
#
|
||||||
|
set sql_mode='STRICT_ALL_TABLES';
|
||||||
|
create or replace table t1 (a int) with system versioning;
|
||||||
|
set system_versioning_insert_history= on;
|
||||||
|
insert into t1 (a,row_start,row_end) values (1,'2022-01-01','2023-01-01'),(1,'2022-01-01','2023-01-01');
|
||||||
|
select a,row_start,row_end into outfile 'mdev29813.txt' from t1 for system_time all;
|
||||||
|
create or replace table t1 (a int primary key) with system versioning;
|
||||||
|
load data infile 'mdev29813.txt' ignore into table t1 (a,row_start,row_end);
|
||||||
|
Warnings:
|
||||||
|
Warning 1062 Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
select a,row_start,row_end from t1 for system_time all;
|
||||||
|
a row_start row_end
|
||||||
|
1 2022-01-01 00:00:00.000000 2023-01-01 00:00:00.000000
|
||||||
|
create or replace table t1 (a int primary key) with system versioning;
|
||||||
|
insert ignore into t1 (a,row_start,row_end) values (1,'2022-01-01','2023-01-01'),(1,'2022-01-01','2023-01-01');
|
||||||
|
Warnings:
|
||||||
|
Warning 1062 Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
select a,row_start,row_end from t1 for system_time all;
|
||||||
|
a row_start row_end
|
||||||
|
1 2022-01-01 00:00:00.000000 2023-01-01 00:00:00.000000
|
||||||
|
drop table t1;
|
||||||
|
set sql_mode=default;
|
||||||
|
@@ -239,4 +239,27 @@ use test;
|
|||||||
|
|
||||||
drop tables t1, t2, t3;
|
drop tables t1, t2, t3;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-29813 REPLACE/IGNORE does not work with historical records in InnoDB
|
||||||
|
--echo #
|
||||||
|
set sql_mode='STRICT_ALL_TABLES';
|
||||||
|
|
||||||
|
create or replace table t1 (a int) with system versioning;
|
||||||
|
set system_versioning_insert_history= on;
|
||||||
|
insert into t1 (a,row_start,row_end) values (1,'2022-01-01','2023-01-01'),(1,'2022-01-01','2023-01-01');
|
||||||
|
select a,row_start,row_end into outfile 'mdev29813.txt' from t1 for system_time all;
|
||||||
|
|
||||||
|
create or replace table t1 (a int primary key) with system versioning;
|
||||||
|
load data infile 'mdev29813.txt' ignore into table t1 (a,row_start,row_end);
|
||||||
|
select a,row_start,row_end from t1 for system_time all;
|
||||||
|
|
||||||
|
create or replace table t1 (a int primary key) with system versioning;
|
||||||
|
insert ignore into t1 (a,row_start,row_end) values (1,'2022-01-01','2023-01-01'),(1,'2022-01-01','2023-01-01');
|
||||||
|
select a,row_start,row_end from t1 for system_time all;
|
||||||
|
|
||||||
|
--let $datadir= `select @@datadir`
|
||||||
|
--remove_file $datadir/test/mdev29813.txt
|
||||||
|
drop table t1;
|
||||||
|
set sql_mode=default;
|
||||||
|
|
||||||
-- source suite/versioning/common_finish.inc
|
-- source suite/versioning/common_finish.inc
|
||||||
|
@@ -284,11 +284,11 @@ int TABLE::delete_row()
|
|||||||
vers_update_end();
|
vers_update_end();
|
||||||
int err= file->ha_update_row(record[1], record[0]);
|
int err= file->ha_update_row(record[1], record[0]);
|
||||||
/*
|
/*
|
||||||
MDEV-23644: we get HA_ERR_FOREIGN_DUPLICATE_KEY iff we already got history
|
MDEV-23644: we get HA_ERR_FOUND_DUPP_KEY iff we already got history
|
||||||
row with same trx_id which is the result of foreign key action, so we
|
row with same trx_id which is the result of foreign key action, so we
|
||||||
don't need one more history row.
|
don't need one more history row.
|
||||||
*/
|
*/
|
||||||
if (err == HA_ERR_FOREIGN_DUPLICATE_KEY)
|
if (err == HA_ERR_FOUND_DUPP_KEY)
|
||||||
return file->ha_delete_row(record[0]);
|
return file->ha_delete_row(record[0]);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@@ -2348,7 +2348,7 @@ duplicate:
|
|||||||
&trx_id_len);
|
&trx_id_len);
|
||||||
ut_ad(trx_id_len == DATA_TRX_ID_LEN);
|
ut_ad(trx_id_len == DATA_TRX_ID_LEN);
|
||||||
if (trx->id == trx_read_trx_id(trx_id)) {
|
if (trx->id == trx_read_trx_id(trx_id)) {
|
||||||
err = DB_FOREIGN_DUPLICATE_KEY;
|
err = DB_DUPLICATE_KEY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
goto func_exit;
|
goto func_exit;
|
||||||
|
Reference in New Issue
Block a user