mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
MDEV-25555 Server crashes in tree_record_pos after INPLACE-recreating index on HEAP table
Drop and add same key is considered rename (look ALTER_RENAME_INDEX in fill_alter_inplace_info()). But in this case order of keys may be changed, because mysql_prepare_alter_table() yet does not know about rename and treats 2 operations: drop and add. In that case we disable inplace algorithm for such engines as Memory, MyISAM and Aria with ALTER_INDEX_ORDER flag. These engines have no specialized check_if_supported_inplace_alter() and default handler::check_if_supported_inplace_alter() sees an unknown flag and returns HA_ALTER_INPLACE_NOT_SUPPORTED. ha_innobase::check_if_supported_inplace_alter() works differently and inplace is not disabled (with the help of modified INNOBASE_INPLACE_IGNORE). add_drop_v_cols fork was also tweaked as it wrongly failed with MSG_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN when it seen ALTER_INDEX_ORDER. No-op operation must be still no-op no matter of ALTER_INDEX_ORDER presence, so we tweek its condition as well.
This commit is contained in:
parent
b3bdc1c142
commit
5cae401b00
8 changed files with 44 additions and 6 deletions
|
|
@ -3389,5 +3389,15 @@ test.t1 check status OK
|
|||
drop table t1;
|
||||
set @@default_storage_engine= @save_default_engine;
|
||||
#
|
||||
# MDEV-25555 Server crashes in tree_record_pos after INPLACE-recreating index on HEAP table
|
||||
#
|
||||
create table t1 (a int, key idx1(a), key idx2 using btree(a)) engine=memory;
|
||||
alter table t1 rename index idx1 to idx3, algorithm=inplace;
|
||||
delete from t1 where a = 10;
|
||||
alter table t1 drop key idx3, add key idx1(a), algorithm=inplace;
|
||||
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
|
||||
delete from t1 where a = 11;
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.5 tests
|
||||
#
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue