summaryrefslogtreecommitdiff
path: root/sql/sql_insert.cc
diff options
context:
space:
mode:
authorNikita Malyavin <nikitamalyavin@gmail.com>2021-03-24 01:02:26 +0300
committerNikita Malyavin <nikitamalyavin@gmail.com>2021-04-08 17:56:31 +0300
commit365cc8e5fd86d522b620436359793bea62c7567e (patch)
tree061830eceec4b85d89c1d8eee309ce3c7135e73a /sql/sql_insert.cc
parent6e7e772d780b23066307c307c45c552f5bf3d5dd (diff)
downloadmariadb-git-bb-10.2-purge-debug-sync.tar.gz
MDEV-24583 SELECT aborts after failed REPLACE into table with vcolbb-10.2-purge-debug-sync
table->move_fields wasn't undone in case of error. 1. move_fields is unconditionally undone even when error is occurred 2. cherry-pick an assertion in `ptr_in_record`, which is already in 10.5
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r--sql/sql_insert.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index ec79ff6d688..90cf8782d48 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -1753,9 +1753,10 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
in handler methods for the just read row in record[1].
*/
table->move_fields(table->field, table->record[1], table->record[0]);
- if (table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_REPLACE))
- goto err;
+ int verr = table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_REPLACE);
table->move_fields(table->field, table->record[0], table->record[1]);
+ if (verr)
+ goto err;
}
if (info->handle_duplicates == DUP_UPDATE)
{