From 7e3e2d060b35c6c4f1cec05da79f571108af58d6 Mon Sep 17 00:00:00 2001 From: Nikita Malyavin Date: Wed, 13 Mar 2019 22:31:43 +1000 Subject: [PATCH] MDEV-18859 Server crashes in bitmap_bits_set / pack_row / THD::binlog_write_row upon DELETE .. FOR PORTION with binary logging rpl_write_set is initialized in TABLE::mark_columns_per_binlog_row_image. Since we just call use_all_columns for PORTION OF case, no need in column marking logic here. Instead, initialize table->rpl_write_set in place. --- mysql-test/suite/period/t/delete.test | 1 + sql/sql_delete.cc | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/mysql-test/suite/period/t/delete.test b/mysql-test/suite/period/t/delete.test index b614f5d45db..105aebed22c 100644 --- a/mysql-test/suite/period/t/delete.test +++ b/mysql-test/suite/period/t/delete.test @@ -1,4 +1,5 @@ source suite/period/engines.inc; +source include/have_log_bin.inc; create or replace table t (id int, s date, e date, period for apptime(s,e)); diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 42f96d876a9..d2e511b1d86 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -718,9 +718,14 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, goto got_error; if (table_list->has_period()) + { table->use_all_columns(); + table->rpl_write_set= table->write_set; + } else + { table->mark_columns_needed_for_delete(); + } if ((table->file->ha_table_flags() & HA_CAN_FORCE_BULK_DELETE) && !table->prepare_triggers_for_delete_stmt_or_event())