diff options
author | Monty <monty@mariadb.org> | 2018-05-15 12:30:32 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2018-05-15 13:12:35 +0300 |
commit | b050df4fd3ee5f2377a814fd24ac3774d1458f99 (patch) | |
tree | cd4b05e9e20c6dfe6f9f9d42a402cf934ec7c583 /storage/maria | |
parent | 197bf0fe35efb148c4e751e1b695786d61238e8e (diff) | |
download | mariadb-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.cc | 1 | ||||
-rw-r--r-- | storage/maria/ma_recovery.c | 3 |
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)) |