1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-14632 Assertion `!((new_col->prtype ^ col->prtype) & ~256U)' failed in row_log_table_apply_convert_mrec

ha_innobase::check_if_supported_inplace_alter(): enabled non-rebuilding operations for trx_id-based system-versioning tables

Also added better error message for not implemented operations.
This commit is contained in:
Eugene Kosov
2017-12-21 14:59:18 +03:00
committed by GitHub
parent 7880dc65f5
commit 6dc75b5f89
4 changed files with 41 additions and 23 deletions

View File

@ -1,32 +1,38 @@
set system_versioning_alter_history=keep;
create or replace table t (a int) engine=innodb;
create or replace table t (a int, b int) engine=innodb;
alter table t add system versioning, lock=none;
ERROR 0A000: LOCK=NONE is not supported for this operation. Try LOCK=SHARED
alter table t add system versioning;
ERROR 0A000: LOCK=NONE is not supported. Reason: Not implemented for system-versioned tables. Try LOCK=SHARED
alter table t add system versioning, lock=shared;
alter table t drop column b, lock=none;
ERROR 0A000: LOCK=NONE is not supported. Reason: Not implemented for system-versioned tables. Try LOCK=SHARED
alter table t drop column b, algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Not implemented for system-versioned tables. Try ALGORITHM=COPY
alter table t add index idx(a), lock=none;
ERROR 0A000: LOCK=NONE is not supported for this operation. Try LOCK=SHARED
alter table t drop system versioning, lock=none;
ERROR 0A000: LOCK=NONE is not supported for this operation. Try LOCK=SHARED
ERROR 0A000: LOCK=NONE is not supported. Reason: Not implemented for system-versioned tables. Try LOCK=SHARED
alter table t drop system versioning, algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Not implemented for system-versioned tables. Try ALGORITHM=COPY
set global system_versioning_transaction_registry=on;
Warnings:
Warning 4144 Transaction-based system versioning is EXPERIMENTAL and is subject to change in future.
create or replace table t (a int) engine=innodb;
create or replace table t (a int, b int) engine=innodb;
alter table t
add s bigint unsigned as row start,
add e bigint unsigned as row end,
add period for system_time(s, e),
add system versioning,
lock=none;
ERROR 0A000: LOCK=NONE is not supported for this operation. Try LOCK=SHARED
ERROR 0A000: LOCK=NONE is not supported. Reason: Not implemented for system-versioned tables. Try LOCK=SHARED
alter table t
add s bigint unsigned as row start,
add e bigint unsigned as row end,
add period for system_time(s, e),
add system versioning;
alter table t drop column b, lock=none;
ERROR 0A000: LOCK=NONE is not supported. Reason: Not implemented for system-versioned tables. Try LOCK=SHARED
alter table t add index idx(a), lock=none;
ERROR 0A000: LOCK=NONE is not supported for this operation. Try LOCK=SHARED
alter table t drop column s, drop column e;
alter table t drop system versioning, lock=none;
ERROR 0A000: LOCK=NONE is not supported for this operation. Try LOCK=SHARED
ERROR 0A000: LOCK=NONE is not supported. Reason: Not implemented for system-versioned tables. Try LOCK=SHARED
set global system_versioning_transaction_registry=off;
drop table t;

View File

@ -2,21 +2,26 @@
set system_versioning_alter_history=keep;
create or replace table t (a int) engine=innodb;
create or replace table t (a int, b int) engine=innodb;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t add system versioning, lock=none;
alter table t add system versioning;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
alter table t add system versioning, lock=shared;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t drop column b, lock=none;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t drop column b, algorithm=inplace;
alter table t add index idx(a), lock=none;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t drop system versioning, lock=none;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t drop system versioning, algorithm=inplace;
set global system_versioning_transaction_registry=on;
create or replace table t (a int) engine=innodb;
create or replace table t (a int, b int) engine=innodb;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t
add s bigint unsigned as row start,
add e bigint unsigned as row end,
@ -28,10 +33,11 @@ alter table t
add e bigint unsigned as row end,
add period for system_time(s, e),
add system versioning;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t drop column b, lock=none;
alter table t add index idx(a), lock=none;
alter table t drop column s, drop column e;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t drop system versioning, lock=none;
set global system_versioning_transaction_registry=off;