summaryrefslogtreecommitdiff
path: root/storage/maria
diff options
context:
space:
mode:
authorMonty <monty@mariadb.org>2018-05-15 12:30:32 +0300
committerMonty <monty@mariadb.org>2018-05-15 13:12:35 +0300
commitb050df4fd3ee5f2377a814fd24ac3774d1458f99 (patch)
treecd4b05e9e20c6dfe6f9f9d42a402cf934ec7c583 /storage/maria
parent197bf0fe35efb148c4e751e1b695786d61238e8e (diff)
downloadmariadb-git-b050df4fd3ee5f2377a814fd24ac3774d1458f99.tar.gz
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)
Diffstat (limited to 'storage/maria')
-rw-r--r--storage/maria/ha_maria.cc1
-rw-r--r--storage/maria/ma_recovery.c3
2 files changed, 4 insertions, 0 deletions
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))