diff options
-rw-r--r-- | mysql-test/suite/versioning/r/load_data.result | 8 | ||||
-rw-r--r-- | mysql-test/suite/versioning/t/load_data.test | 12 | ||||
-rw-r--r-- | sql/sql_load.cc | 7 |
3 files changed, 27 insertions, 0 deletions
diff --git a/mysql-test/suite/versioning/r/load_data.result b/mysql-test/suite/versioning/r/load_data.result new file mode 100644 index 00000000000..83d64cee787 --- /dev/null +++ b/mysql-test/suite/versioning/r/load_data.result @@ -0,0 +1,8 @@ +CREATE TABLE t1 (a INT, b INT, c INT, vc INT AS (c), UNIQUE(a), UNIQUE(b)) WITH SYSTEM VERSIONING; +INSERT IGNORE INTO t1 (a,b,c) VALUES (1,2,3); +SELECT a, b, c FROM t1 INTO OUTFILE '15330.data'; +LOAD DATA INFILE '15330.data' IGNORE INTO TABLE t1 (a,b,c); +Warnings: +Warning 1062 Duplicate entry '1-2038-01-19 04:14:07.999999' for key 'a' +LOAD DATA INFILE '15330.data' REPLACE INTO TABLE t1 (a,b,c); +DROP TABLE t1; diff --git a/mysql-test/suite/versioning/t/load_data.test b/mysql-test/suite/versioning/t/load_data.test new file mode 100644 index 00000000000..4db6eee6c4d --- /dev/null +++ b/mysql-test/suite/versioning/t/load_data.test @@ -0,0 +1,12 @@ +# +# MDEV-15330 Server crash or assertion `table->insert_values' failure in write_record upon LOAD DATA +# +CREATE TABLE t1 (a INT, b INT, c INT, vc INT AS (c), UNIQUE(a), UNIQUE(b)) WITH SYSTEM VERSIONING; +INSERT IGNORE INTO t1 (a,b,c) VALUES (1,2,3); + +SELECT a, b, c FROM t1 INTO OUTFILE '15330.data'; +LOAD DATA INFILE '15330.data' IGNORE INTO TABLE t1 (a,b,c); +LOAD DATA INFILE '15330.data' REPLACE INTO TABLE t1 (a,b,c); + +# Cleanup +DROP TABLE t1; diff --git a/sql/sql_load.cc b/sql/sql_load.cc index ad97e70bdd8..9d367149eaa 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -409,6 +409,13 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, is_concurrent= (table_list->lock_type == TL_WRITE_CONCURRENT_INSERT); #endif + if (table->versioned(VERS_TIMESTAMP) && handle_duplicates == DUP_REPLACE) + { + // Additional memory may be required to create historical items. + if (table_list->set_insert_values(thd->mem_root)) + DBUG_RETURN(TRUE); + } + if (!fields_vars.elements) { Field_iterator_table_ref field_iterator; |