From b050df4fd3ee5f2377a814fd24ac3774d1458f99 Mon Sep 17 00:00:00 2001 From: Monty Date: Tue, 15 May 2018 12:30:32 +0300 Subject: MDEV-14943 Alter table ORDER BY bug Problem was that if copy_data_between_tables() didn't do proper clean up in case of failures: - copy object was not properly freed - end_bulk_insert() was not called - mysql_trans_prepare_alter_copy_data() set THD->transaction.on to false which was not properly restored The last part caused a crash in Aria as Aria depends on that THD is correct. Other things: - Reset info->switched_transactional after usage (safety) - Reset bulk_insert_single_undo (safety) --- storage/maria/ha_maria.cc | 1 + storage/maria/ma_recovery.c | 3 +++ 2 files changed, 4 insertions(+) (limited to 'storage/maria') diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index f52336de9d0..80f278ab2eb 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -2224,6 +2224,7 @@ end: _ma_reenable_logging_for_table(file, bulk_insert_single_undo == BULK_INSERT_SINGLE_UNDO_AND_NO_REPAIR); + bulk_insert_single_undo= BULK_INSERT_NONE; // Safety } DBUG_RETURN(err); } diff --git a/storage/maria/ma_recovery.c b/storage/maria/ma_recovery.c index 4c3310c68c5..b0c38e9f24d 100644 --- a/storage/maria/ma_recovery.c +++ b/storage/maria/ma_recovery.c @@ -3583,7 +3583,10 @@ my_bool _ma_reenable_logging_for_table(MARIA_HA *info, my_bool flush_pages) if (share->now_transactional == share->base.born_transactional || !info->switched_transactional) + { + info->switched_transactional= FALSE; DBUG_RETURN(0); + } info->switched_transactional= FALSE; if ((share->now_transactional= share->base.born_transactional)) -- cgit v1.2.1