diff options
-rw-r--r-- | mysql-test/suite/versioning/r/replace.result | 8 | ||||
-rw-r--r-- | mysql-test/suite/versioning/t/replace.test | 10 | ||||
-rw-r--r-- | sql/sql_insert.cc | 7 | ||||
-rw-r--r-- | sql/sql_load.cc | 7 |
4 files changed, 20 insertions, 12 deletions
diff --git a/mysql-test/suite/versioning/r/replace.result b/mysql-test/suite/versioning/r/replace.result index 52db0db429a..1711be5212e 100644 --- a/mysql-test/suite/versioning/r/replace.result +++ b/mysql-test/suite/versioning/r/replace.result @@ -26,3 +26,11 @@ id x current 1 2 0 1 3 1 drop table t; +# MDEV-15645 Assertion `table->insert_values' failed in write_record upon REPLACE into a view with underlying versioned table +create or replace table t1 (a int, b int, primary key (a), unique(b)) with system versioning; +insert into t1 values (1,1); +create or replace table t2 (c int); +create or replace view v as select t1.* from t1 join t2; +replace into v (a, b) select a, b from t1; +drop database test; +create database test; diff --git a/mysql-test/suite/versioning/t/replace.test b/mysql-test/suite/versioning/t/replace.test index a4f7b245988..bc7e084758d 100644 --- a/mysql-test/suite/versioning/t/replace.test +++ b/mysql-test/suite/versioning/t/replace.test @@ -29,4 +29,12 @@ replace t values (1, 3); select *, current_row(row_end) as current from t for system_time all order by x; drop table t; ---source suite/versioning/common_finish.inc +--echo # MDEV-15645 Assertion `table->insert_values' failed in write_record upon REPLACE into a view with underlying versioned table +create or replace table t1 (a int, b int, primary key (a), unique(b)) with system versioning; +insert into t1 values (1,1); +create or replace table t2 (c int); +create or replace view v as select t1.* from t1 join t2; +replace into v (a, b) select a, b from t1; + +drop database test; +create database test; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index a60a6f2975e..715d128c68f 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1970,13 +1970,12 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info) error= table->file->ha_delete_row(table->record[1]); else { - DBUG_ASSERT(table->insert_values); - store_record(table,insert_values); - restore_record(table,record[1]); + store_record(table, record[2]); + restore_record(table, record[1]); table->vers_update_end(); error= table->file->ha_update_row(table->record[1], table->record[0]); - restore_record(table,insert_values); + restore_record(table, record[2]); } if (unlikely(error)) goto err; diff --git a/sql/sql_load.cc b/sql/sql_load.cc index cc5a5c7c794..ddb5029c78a 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -431,13 +431,6 @@ int mysql_load(THD *thd, const 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; |