From c5fbae50a2083828ee1ed65bca4c77b6ffdd16b3 Mon Sep 17 00:00:00 2001 From: poempeng Date: Mon, 24 Apr 2023 10:29:36 +0800 Subject: [PATCH] Support instant modify column --- mysql-test/r/mysqlshow_cs.result | 2 + ...i_s_schema_assert_and_fill_table_names.inc | 1 + .../i_s_schema_dump_table_defs_debug.inc | 5 + .../r/i_s_schema_definition_debug.result | 26 +- .../t/i_s_schema_definition_debug.test | 4 +- .../include/instant_modify_column_basic.inc | 323 ++ .../r/instant_modify_column_basic.result | 1098 ++++++ .../r/instant_modify_limitations.result | 352 ++ .../innodb/r/instant_modify_row_size.result | 3063 +++++++++++++++++ .../innodb/r/instant_modify_with_gcol.result | 61 + .../r/instant_modify_with_import.result | 63 + .../innodb/r/instant_modify_with_index.result | 285 ++ .../r/instant_modify_with_online_ddl.result | 89 + .../r/instant_modify_with_recovery.result | 209 ++ .../r/instant_modify_with_rollback.result | 1598 +++++++++ .../r/instant_modify_with_update.result | 1480 ++++++++ .../innodb/t/instant_modify_column_basic.test | 15 + .../innodb/t/instant_modify_limitations.test | 343 ++ .../innodb/t/instant_modify_row_size.test | 2048 +++++++++++ .../innodb/t/instant_modify_with_gcol.test | 39 + .../innodb/t/instant_modify_with_import.test | 88 + .../innodb/t/instant_modify_with_index.test | 161 + .../t/instant_modify_with_online_ddl.test | 75 + .../t/instant_modify_with_recovery.test | 109 + .../t/instant_modify_with_rollback.test | 1329 +++++++ .../innodb/t/instant_modify_with_update.test | 1043 ++++++ share/messages_to_clients.txt | 3 + sql/CMakeLists.txt | 1 + sql/dd/impl/system_registry.cc | 2 + .../innodb_instant_modified_cols.cc | 64 + .../innodb_instant_modified_cols.h | 70 + sql/item_create.cc | 5 +- sql/item_strfunc.cc | 72 + sql/item_strfunc.h | 23 + storage/innobase/btr/btr0btr.cc | 23 + storage/innobase/ddl/ddl0fts.cc | 3 + storage/innobase/dict/dict0dd.cc | 150 +- storage/innobase/dict/dict0inst.cc | 170 +- storage/innobase/dict/dict0mem.cc | 27 + storage/innobase/dict/mem.cc | 7 + storage/innobase/handler/ha_innodb.cc | 54 +- storage/innobase/handler/ha_innopart.cc | 5 + storage/innobase/handler/handler0alter.cc | 347 +- storage/innobase/include/dict0dd.h | 61 +- storage/innobase/include/dict0inst.h | 22 +- storage/innobase/include/dict0mem.h | 43 +- storage/innobase/include/dict0mem.ic | 7 + storage/innobase/include/row0row.h | 4 + storage/innobase/include/row0sel.h | 5 +- storage/innobase/include/row0upd.h | 19 +- storage/innobase/include/row0upd.ic | 1 + storage/innobase/mtr/mtr0log.cc | 69 +- storage/innobase/page/page0cur.cc | 2 +- storage/innobase/rem/rec.cc | 21 + storage/innobase/rem/rec.h | 10 + storage/innobase/rem/rem0rec.cc | 22 +- storage/innobase/row/row0import.cc | 7 + storage/innobase/row/row0log.cc | 30 +- storage/innobase/row/row0row.cc | 154 +- storage/innobase/row/row0sel.cc | 134 +- storage/innobase/row/row0upd.cc | 10 + storage/innobase/trx/trx0rec.cc | 15 +- 62 files changed, 15476 insertions(+), 95 deletions(-) create mode 100644 mysql-test/suite/innodb/include/instant_modify_column_basic.inc create mode 100644 mysql-test/suite/innodb/r/instant_modify_column_basic.result create mode 100644 mysql-test/suite/innodb/r/instant_modify_limitations.result create mode 100644 mysql-test/suite/innodb/r/instant_modify_row_size.result create mode 100644 mysql-test/suite/innodb/r/instant_modify_with_gcol.result create mode 100644 mysql-test/suite/innodb/r/instant_modify_with_import.result create mode 100644 mysql-test/suite/innodb/r/instant_modify_with_index.result create mode 100644 mysql-test/suite/innodb/r/instant_modify_with_online_ddl.result create mode 100644 mysql-test/suite/innodb/r/instant_modify_with_recovery.result create mode 100644 mysql-test/suite/innodb/r/instant_modify_with_rollback.result create mode 100644 mysql-test/suite/innodb/r/instant_modify_with_update.result create mode 100644 mysql-test/suite/innodb/t/instant_modify_column_basic.test create mode 100644 mysql-test/suite/innodb/t/instant_modify_limitations.test create mode 100644 mysql-test/suite/innodb/t/instant_modify_row_size.test create mode 100644 mysql-test/suite/innodb/t/instant_modify_with_gcol.test create mode 100644 mysql-test/suite/innodb/t/instant_modify_with_import.test create mode 100644 mysql-test/suite/innodb/t/instant_modify_with_index.test create mode 100644 mysql-test/suite/innodb/t/instant_modify_with_online_ddl.test create mode 100644 mysql-test/suite/innodb/t/instant_modify_with_recovery.test create mode 100644 mysql-test/suite/innodb/t/instant_modify_with_rollback.test create mode 100644 mysql-test/suite/innodb/t/instant_modify_with_update.test create mode 100644 sql/dd/impl/system_views/innodb_instant_modified_cols.cc create mode 100644 sql/dd/impl/system_views/innodb_instant_modified_cols.h diff --git a/mysql-test/r/mysqlshow_cs.result b/mysql-test/r/mysqlshow_cs.result index c12a7dfa80b..b9baf08a5b5 100644 --- a/mysql-test/r/mysqlshow_cs.result +++ b/mysql-test/r/mysqlshow_cs.result @@ -115,6 +115,7 @@ Database: information_schema | INNODB_FT_INDEX_CACHE | | INNODB_FT_INDEX_TABLE | | INNODB_INDEXES | +| INNODB_INSTANT_MODIFIED_COLS | | INNODB_METRICS | | INNODB_SESSION_TEMP_TABLESPACES | | INNODB_TABLES | @@ -199,6 +200,7 @@ Database: INFORMATION_SCHEMA | INNODB_FT_INDEX_CACHE | | INNODB_FT_INDEX_TABLE | | INNODB_INDEXES | +| INNODB_INSTANT_MODIFIED_COLS | | INNODB_METRICS | | INNODB_SESSION_TEMP_TABLESPACES | | INNODB_TABLES | diff --git a/mysql-test/suite/information_schema/include/i_s_schema_assert_and_fill_table_names.inc b/mysql-test/suite/information_schema/include/i_s_schema_assert_and_fill_table_names.inc index ef19d220120..d9636d18b51 100644 --- a/mysql-test/suite/information_schema/include/i_s_schema_assert_and_fill_table_names.inc +++ b/mysql-test/suite/information_schema/include/i_s_schema_assert_and_fill_table_names.inc @@ -40,6 +40,7 @@ eval INSERT INTO $I_S_view_names (name) VALUES ('INNODB_FOREIGN'), ('INNODB_FOREIGN_COLS'), ('INNODB_FIELDS'), + ('INNODB_INSTANT_MODIFIED_COLS'), ('INNODB_TABLESPACES_BRIEF'), ('KEY_COLUMN_USAGE'), ('KEYWORDS'), diff --git a/mysql-test/suite/information_schema/include/i_s_schema_dump_table_defs_debug.inc b/mysql-test/suite/information_schema/include/i_s_schema_dump_table_defs_debug.inc index 83ab23094e8..08bf339a5b3 100644 --- a/mysql-test/suite/information_schema/include/i_s_schema_dump_table_defs_debug.inc +++ b/mysql-test/suite/information_schema/include/i_s_schema_dump_table_defs_debug.inc @@ -94,6 +94,11 @@ let $str = `$SELECT_CMD $WHERE_COND`; echo $str; eval INSERT INTO I_S_check_table(t) VALUES ("$str"); +let $WHERE_COND = AND TABLE_NAME='INNODB_INSTANT_MODIFIED_COLS'; +let $str = `$SELECT_CMD $WHERE_COND`; +echo $str; +eval INSERT INTO I_S_check_table(t) VALUES ("$str"); + let $WHERE_COND = AND TABLE_NAME='INNODB_TABLESPACES_BRIEF'; let $str = `$SELECT_CMD $WHERE_COND`; echo $str; diff --git a/mysql-test/suite/information_schema/r/i_s_schema_definition_debug.result b/mysql-test/suite/information_schema/r/i_s_schema_definition_debug.result index deea8ee5e32..05cd50a730a 100644 --- a/mysql-test/suite/information_schema/r/i_s_schema_definition_debug.result +++ b/mysql-test/suite/information_schema/r/i_s_schema_definition_debug.result @@ -103,8 +103,8 @@ CREATE TABLE test.I_S_view_names (name VARCHAR(64) PRIMARY KEY); ######################################################################## # The number of I_S system views must be as expected. ######################################################################## -include/assert.inc [There are 44 system views.] -include/assert.inc [There are 44 I_S system views in total.] +include/assert.inc [There are 45 system views.] +include/assert.inc [There are 45 I_S system views in total.] ######################################################################## # No unexpected I_S tables must be present. ######################################################################## @@ -575,6 +575,28 @@ INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infosch AND tbl.se_private_id IS NOT NULL AND tbl.engine='INNODB' "); +CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_INSTANT_MODIFIED_COLS AS SELECT + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'table_id'),char(100) character set utf8mb4) AS TABLE_ID, + name AS NAME, + ordinal_position AS POS, + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'version'),char(100) character set utf8mb4) AS VERSION, + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'mtype'),char(100) character set utf8mb4) AS MTYPE, + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'prtype'),char(100) character set utf8mb4) AS PRTYPE, + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'len'),char(100) character set utf8mb4) AS LEN FROM + mysql.columns WHERE + instr(se_private_data, 'modified_version') <> 0 + +INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_INSTANT_MODIFIED_COLS AS SELECT + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'table_id'),char(100) character set utf8mb4) AS TABLE_ID, + name AS NAME, + ordinal_position AS POS, + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'version'),char(100) character set utf8mb4) AS VERSION, + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'mtype'),char(100) character set utf8mb4) AS MTYPE, + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'prtype'),char(100) character set utf8mb4) AS PRTYPE, + CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, 'len'),char(100) character set utf8mb4) AS LEN FROM + mysql.columns WHERE + instr(se_private_data, 'modified_version') <> 0 +"); CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_TABLESPACES_BRIEF AS SELECT GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'id') AS SPACE, ts.name AS NAME, diff --git a/mysql-test/suite/information_schema/t/i_s_schema_definition_debug.test b/mysql-test/suite/information_schema/t/i_s_schema_definition_debug.test index c2090783942..869c38cb606 100644 --- a/mysql-test/suite/information_schema/t/i_s_schema_definition_debug.test +++ b/mysql-test/suite/information_schema/t/i_s_schema_definition_debug.test @@ -98,7 +98,7 @@ SET debug = '+d,skip_dd_table_access_check'; # Total number of system views in MySQL server. -let $expected_system_view_count = 44; +let $expected_system_view_count = 45; --echo ######################################################################## --echo # PART 1 @@ -304,7 +304,7 @@ INSERT INTO I_S_published_schema '06bdff30a209ee9b41bf1b654048010e0ca67399ccca594600659816fb3ee036'); INSERT INTO I_S_published_schema VALUES ('80030', '80030', 0, - 'f2f9eac78a7fe69de079bd55831bb4451236c492a76f9195e43051db44e84510'); + 'b106ec496609cb59108b522666660635d8d8085d7e8644008bc70d2ae0b42b7a'); INSERT INTO I_S_published_schema VALUES ('80030', '80030', 1, '4399948df993b3a2084c4a6dd80d76e38b2ff874e68b7e33a16b907eeb090ff0'); diff --git a/mysql-test/suite/innodb/include/instant_modify_column_basic.inc b/mysql-test/suite/innodb/include/instant_modify_column_basic.inc new file mode 100644 index 00000000000..d1d7fc15606 --- /dev/null +++ b/mysql-test/suite/innodb/include/instant_modify_column_basic.inc @@ -0,0 +1,323 @@ + +--echo # +--echo # Scenario 1: +--echo # Create a small table, and modify all kinds of columns and verify +--echo # + +--eval CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=$row_format + +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); + +# modify COLUMN BIGINT on pk column, should fail. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY COLUMN a BIGINT AUTO_INCREMENT, ALGORITHM=INSTANT; + +# modify column BIGINT on b column, should sucess. +ALTER TABLE t1 MODIFY COLUMN b BIGINT, ALGORITHM=INSTANT; + +INSERT INTO t1(a, b) VALUES(0, 1); +SELECT * FROM t1; + +# instant ADD COLUMN INT +ALTER TABLE t1 ADD COLUMN c3 INT NOT NULL DEFAULT 10, ALGORITHM=INSTANT; + +INSERT INTO t1(a, c3) VALUES(0, 11); +SELECT * FROM t1; + +# ADD COLUMN CHAR & VARCHAR +ALTER TABLE t1 ADD COLUMN c4 CHAR(50), ADD COLUMN c5 VARCHAR(100), ALGORITHM=INSTANT; + +INSERT INTO t1(a, c4, c5) VALUES(0, 'ABCD EFGH', 'abcdefg hijklmn '); +SELECT * FROM t1; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY COLUMN c4 CHAR(100), ALGORITHM=INSTANT; + +INSERT INTO t1(a, c4, c5) VALUES(0, 'ABCD EFGH', 'abcdefg hijklmn '); +SELECT * FROM t1; + +# ADD COLUMN CHAR & VARCHAR DEFAULT +let $new_cols = 2; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN m1 CHAR(50) default 'The fox jumps over', ADD COLUMN m2 VARCHAR(50) DEFAULT 'The fox jumps over the lazy dog.', ALGORITHM=inplace; + +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +ALTER TABLE t1 MODIFY COLUMN m1 CHAR(100), ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN m2 CHAR(100), ALGORITHM=INSTANT; + +INSERT INTO t1(a, m1, m2) VALUES(0, 'over the lazy dog', 'The lazy dog jumps over the fox.'); +SELECT count(*) = max(a) FROM t1 WHERE m1 = 'The fox jumps over'; +SELECT count(*) = max(a) FROM t1 WHERE m2 like 'The fox jumps%'; +SELECT m1 FROM t1 WHERE m1 = 'over the lazy dog'; +SELECT m2 FROM t1 WHERE m2 like '%the fox.'; + +# ADD COLUMN BINARY & VARBINARY +let $new_cols = 2; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN n1 BINARY(10), ADD COLUMN n2 VARBINARY(10), ALGORITHM=inplace; + +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +INSERT INTO t1(a, n1, n2) VALUES(0, 0x010203040506070809, 0x102030405060708090); + +ALTER TABLE t1 MODIFY COLUMN n1 BINARY(100), ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN n2 VARBINARY(100), ALGORITHM=INSTANT; + +SELECT count(*) = max(a) FROM t1 WHERE n1 IS NULL; +SELECT count(*) = max(a) FROM t1 WHERE n2 IS NULL; +SELECT hex(n1) FROM t1 WHERE n1 = 0x01020304050607080900; +SELECT hex(n2) FROM t1 WHERE n2 = 0x102030405060708090; + +# ADD COLUMN BINARY & VARBINARY DEFAULT +let $new_cols = 2; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN o1 BINARY(10) DEFAULT 0x11223344, ADD COLUMN o2 VARBINARY(10) DEFAULT 0x55667788, ALGORITHM=inplace; + +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +ALTER TABLE t1 MODIFY COLUMN o1 BINARY(100), ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN o2 VARBINARY(100), ALGORITHM=INSTANT; + +INSERT INTO t1(a, o1, o2) VALUES(0, 0x44332211, 0x88776655); +SELECT count(*) = max(a) FROM t1 WHERE o1 = 0x11223344000000000000; +SELECT count(*) = max(a) FROM t1 WHERE o2 = 0x55667788; +SELECT hex(o1) FROM t1 WHERE o1 = 0x44332211000000000000; +SELECT hex(o2) FROM t1 WHERE o2 = 0x88776655; + +CHECK TABLE t1; + +SHOW CREATE TABLE t1; + +DROP TABLE t1; + + +--echo # +--echo # Scenario 2: +--echo # Create a small table, modify some columns instantly, along with +--echo # virtual columns +--echo # + +--eval CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=$row_format + +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); + + +let $new_cols = 1; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN c INT NOT NULL, ADD COLUMN d INT GENERATED ALWAYS AS ((b * 2)) VIRTUAL, ALGORITHM=copy; + +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +ALTER TABLE t1 MODIFY COLUMN c BIGINT not null, ALGORITHM=INSTANT; +INSERT INTO t1(a, b, c) VALUES(0, 6, 20); +SELECT * FROM t1; + +let $new_cols = 1; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN e VARCHAR(100) DEFAULT 'ABCD EFGH', ADD COLUMN f INT GENERATED ALWAYS AS (LENGTH(e)), ALGORITHM=copy; + +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; +INSERT INTO t1(a, c, e) VALUES(0, 20, 'Hello'), (0, 20, 'World'), (0, 20, 'Hello World'); +SELECT * FROM t1; + +let $new_cols = 1; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN g VARCHAR(100) GENERATED ALWAYS AS (e), ADD COLUMN h BIGINT DEFAULT 10000, ADD COLUMN i BIGINT GENERATED ALWAYS AS (h * 2 + b), ALGORITHM=copy; + +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +# modify generated column is not allowed. +--error 3106 +ALTER TABLE t1 MODIFY COLUMN g VARCHAR(150), ALGORITHM=INSTANT; + +SELECT * FROM t1; +INSERT INTO t1(a, b, c, h) VALUES(0, 7, 40, 2000), (0, 7, 40, 20000); +SELECT * FROM t1; + + +CHECK TABLE t1; + +SHOW CREATE TABLE t1; + +DROP TABLE t1; + +--echo # +--echo # Scenario 3: +--echo # Create a small table, add some columns, then change +--echo # their default values, check original default values are correct +--echo # + +--eval CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=$row_format + +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); + + +let $new_cols = 2; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world', ALGORITHM=copy; + +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +ALTER TABLE t1 MODIFY COLUMN c BIGINT not null, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; + +SELECT * FROM t1; +INSERT INTO t1(a, b, c, e) VALUES(0, 6, 200, 'Good day'), (0, 7, 300, 'Good DAY'); +SELECT * FROM t1; + +ALTER TABLE t1 ALTER COLUMN c SET DEFAULT 500; +# This should not change + +SELECT * FROM t1; +INSERT INTO t1(a, b) VALUES(0, 8), (0, 9); +SELECT * FROM t1; + +ALTER TABLE t1 ALTER COLUMN e SET DEFAULT 'HELLO MySQL!'; + +SELECT * FROM t1; +INSERT INTO t1(a, b) VALUES(0, 10), (0, 20); +SELECT * FROM t1; + + +CHECK TABLE t1; + +SHOW CREATE TABLE t1; + +DROP TABLE t1; + + +--echo # +--echo # Scenario 4: +--echo # Create a small table, add some columns instantly, then do DML +--echo # on the table +--echo # + +--eval CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=$row_format + +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); + +let $new_cols = 2; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world', ALGORITHM=copy; +# +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +ALTER TABLE t1 MODIFY COLUMN c BIGINT NOT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; + +UPDATE t1 SET c = 200 WHERE a > 3; +SELECT distinct(c) FROM t1; + +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; + +DELETE FROM t1 WHERE c = 100; + +UPDATE t1 SET c = 300; +SELECT distinct(c) FROM t1; + +SELECT count(*) FROM t1; + + +let $new_cols = 1; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN t DATETIME DEFAULT CURRENT_TIMESTAMP, ALGORITHM=instant; + +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +UPDATE t1 SET e = 'Hello MySQL' WHERE a > 10; +UPDATE t1 SET e = 'Hello MySQL!!' WHERE a > 20; +SELECT distinct(e) FROM t1; + +UPDATE t1 SET c = 500 WHERE e LIKE '%world%'; +SELECT c, e FROM t1 GROUP BY c, e; + +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +sleep 1; +UPDATE t1 SET t = CURRENT_TIMESTAMP WHERE a < 50; +SELECT count(t) FROM t1 GROUP BY t; +DELETE FROM t1 WHERE a < 50; +SELECT count(t) FROM t1 GROUP BY t; + +CHECK TABLE t1; + +SHOW CREATE TABLE t1; + +DROP TABLE t1; + +--echo # +--echo # Scenario 5: +--echo # Create a small table, add some columns and modify them instantly, then do DDL +--echo # to build indexes +--echo # + +--eval CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=$row_format + +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); + +let $new_cols = 2; +let $instant_add_column = ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world', ALGORITHM=copy; + +--source ../mysql-test/suite/innodb/include/instant_add_column_exec_and_verify.inc + +ALTER TABLE t1 MODIFY COLUMN c BIGINT NOT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; + +ALTER TABLE t1 ADD KEY(c); + +# Replace the numbers in the output with '#' to stablize the result, after all we only care about the index picked. +--replace_column 8 # 10 # +EXPLAIN SELECT c FROM t1; + +SELECT c FROM t1 WHERE c != 100; + +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; + +UPDATE t1 SET e = 'Hello MySQL' WHERE a > 30; + +ALTER TABLE t1 ADD KEY(e); + +# Replace the numbers in the output with '#' to stablize the result, after all we only care about the index picked. +--replace_column 8 # 10 # +EXPLAIN SELECT e FROM t1; +SELECT count(e) FROM t1 WHERE e LIKE '%MySQL%'; +SELECT count(e) FROM t1 WHERE e LIKE '%world%'; + +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a, c); + +SELECT a, c, e FROM t1 WHERE a > 25 AND a < 40; + +CHECK TABLE t1; + +SHOW CREATE TABLE t1; + +DROP TABLE t1; + +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad char(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad char(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +check table sbtest1; +select pad from sbtest1; +drop table sbtest1; + +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad char(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad varchar(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +check table sbtest1; +select pad from sbtest1; +drop table sbtest1; + +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad varchar(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad char(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +check table sbtest1; +select pad from sbtest1; +drop table sbtest1; + +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad varchar(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad varchar(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +check table sbtest1; +select pad from sbtest1; +drop table sbtest1; diff --git a/mysql-test/suite/innodb/r/instant_modify_column_basic.result b/mysql-test/suite/innodb/r/instant_modify_column_basic.result new file mode 100644 index 00000000000..f118e5095e3 --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_column_basic.result @@ -0,0 +1,1098 @@ +############################################ +# Test instant MODIFY COLUMN for DYNAMIC format +############################################ +# +# Scenario 1: +# Create a small table, and modify all kinds of columns and verify +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 MODIFY COLUMN a BIGINT AUTO_INCREMENT, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +ALTER TABLE t1 MODIFY COLUMN b BIGINT, ALGORITHM=INSTANT; +INSERT INTO t1(a, b) VALUES(0, 1); +SELECT * FROM t1; +a b +1 1 +2 2 +3 3 +4 4 +5 5 +6 1 +ALTER TABLE t1 ADD COLUMN c3 INT NOT NULL DEFAULT 10, ALGORITHM=INSTANT; +INSERT INTO t1(a, c3) VALUES(0, 11); +SELECT * FROM t1; +a b c3 +1 1 10 +2 2 10 +3 3 10 +4 4 10 +5 5 10 +6 1 10 +7 NULL 11 +ALTER TABLE t1 ADD COLUMN c4 CHAR(50), ADD COLUMN c5 VARCHAR(100), ALGORITHM=INSTANT; +INSERT INTO t1(a, c4, c5) VALUES(0, 'ABCD EFGH', 'abcdefg hijklmn '); +SELECT * FROM t1; +a b c3 c4 c5 +1 1 10 NULL NULL +2 2 10 NULL NULL +3 3 10 NULL NULL +4 4 10 NULL NULL +5 5 10 NULL NULL +6 1 10 NULL NULL +7 NULL 11 NULL NULL +8 NULL 10 ABCD EFGH abcdefg hijklmn +ALTER TABLE t1 MODIFY COLUMN c4 CHAR(100), ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +INSERT INTO t1(a, c4, c5) VALUES(0, 'ABCD EFGH', 'abcdefg hijklmn '); +SELECT * FROM t1; +a b c3 c4 c5 +1 1 10 NULL NULL +2 2 10 NULL NULL +3 3 10 NULL NULL +4 4 10 NULL NULL +5 5 10 NULL NULL +6 1 10 NULL NULL +7 NULL 11 NULL NULL +8 NULL 10 ABCD EFGH abcdefg hijklmn +9 NULL 10 ABCD EFGH abcdefg hijklmn +ALTER TABLE t1 ADD COLUMN m1 CHAR(50) default 'The fox jumps over', ADD COLUMN m2 VARCHAR(50) DEFAULT 'The fox jumps over the lazy dog.', ALGORITHM=inplace; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN m1 CHAR(100), ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN m2 CHAR(100), ALGORITHM=INSTANT; +INSERT INTO t1(a, m1, m2) VALUES(0, 'over the lazy dog', 'The lazy dog jumps over the fox.'); +SELECT count(*) = max(a) FROM t1 WHERE m1 = 'The fox jumps over'; +count(*) = max(a) +1 +SELECT count(*) = max(a) FROM t1 WHERE m2 like 'The fox jumps%'; +count(*) = max(a) +1 +SELECT m1 FROM t1 WHERE m1 = 'over the lazy dog'; +m1 +over the lazy dog +SELECT m2 FROM t1 WHERE m2 like '%the fox.'; +m2 +The lazy dog jumps over the fox. +ALTER TABLE t1 ADD COLUMN n1 BINARY(10), ADD COLUMN n2 VARBINARY(10), ALGORITHM=inplace; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(a, n1, n2) VALUES(0, 0x010203040506070809, 0x102030405060708090); +ALTER TABLE t1 MODIFY COLUMN n1 BINARY(100), ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN n2 VARBINARY(100), ALGORITHM=INSTANT; +SELECT count(*) = max(a) FROM t1 WHERE n1 IS NULL; +count(*) = max(a) +1 +SELECT count(*) = max(a) FROM t1 WHERE n2 IS NULL; +count(*) = max(a) +1 +SELECT hex(n1) FROM t1 WHERE n1 = 0x01020304050607080900; +hex(n1) +SELECT hex(n2) FROM t1 WHERE n2 = 0x102030405060708090; +hex(n2) +102030405060708090 +ALTER TABLE t1 ADD COLUMN o1 BINARY(10) DEFAULT 0x11223344, ADD COLUMN o2 VARBINARY(10) DEFAULT 0x55667788, ALGORITHM=inplace; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN o1 BINARY(100), ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN o2 VARBINARY(100), ALGORITHM=INSTANT; +INSERT INTO t1(a, o1, o2) VALUES(0, 0x44332211, 0x88776655); +SELECT count(*) = max(a) FROM t1 WHERE o1 = 0x11223344000000000000; +count(*) = max(a) +NULL +SELECT count(*) = max(a) FROM t1 WHERE o2 = 0x55667788; +count(*) = max(a) +1 +SELECT hex(o1) FROM t1 WHERE o1 = 0x44332211000000000000; +hex(o1) +SELECT hex(o2) FROM t1 WHERE o2 = 0x88776655; +hex(o2) +88776655 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` bigint DEFAULT NULL, + `c3` int NOT NULL DEFAULT '10', + `c4` char(50) DEFAULT NULL, + `c5` varchar(100) DEFAULT NULL, + `m1` char(100) DEFAULT NULL, + `m2` char(100) DEFAULT NULL, + `n1` binary(100) DEFAULT NULL, + `n2` varbinary(100) DEFAULT NULL, + `o1` binary(100) DEFAULT NULL, + `o2` varbinary(100) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC +DROP TABLE t1; +# +# Scenario 2: +# Create a small table, modify some columns instantly, along with +# virtual columns +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 ADD COLUMN c INT NOT NULL, ADD COLUMN d INT GENERATED ALWAYS AS ((b * 2)) VIRTUAL, ALGORITHM=copy; +Table ID differed +count(*) = 1 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN c BIGINT not null, ALGORITHM=INSTANT; +INSERT INTO t1(a, b, c) VALUES(0, 6, 20); +SELECT * FROM t1; +a b c d +1 1 0 2 +2 2 0 4 +3 3 0 6 +4 4 0 8 +5 5 0 10 +6 6 20 12 +ALTER TABLE t1 ADD COLUMN e VARCHAR(100) DEFAULT 'ABCD EFGH', ADD COLUMN f INT GENERATED ALWAYS AS (LENGTH(e)), ALGORITHM=copy; +Table ID differed +count(*) = 1 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; +INSERT INTO t1(a, c, e) VALUES(0, 20, 'Hello'), (0, 20, 'World'), (0, 20, 'Hello World'); +SELECT * FROM t1; +a b c d e f +1 1 0 2 ABCD EFGH 9 +2 2 0 4 ABCD EFGH 9 +3 3 0 6 ABCD EFGH 9 +4 4 0 8 ABCD EFGH 9 +5 5 0 10 ABCD EFGH 9 +6 6 20 12 ABCD EFGH 9 +7 NULL 20 NULL Hello 5 +8 NULL 20 NULL World 5 +9 NULL 20 NULL Hello World 11 +ALTER TABLE t1 ADD COLUMN g VARCHAR(100) GENERATED ALWAYS AS (e), ADD COLUMN h BIGINT DEFAULT 10000, ADD COLUMN i BIGINT GENERATED ALWAYS AS (h * 2 + b), ALGORITHM=copy; +Table ID differed +count(*) = 1 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN g VARCHAR(150), ALGORITHM=INSTANT; +ERROR HY000: 'Changing the STORED status' is not supported for generated columns. +SELECT * FROM t1; +a b c d e f g h i +1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001 +2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002 +3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003 +4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004 +5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005 +6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006 +7 NULL 20 NULL Hello 5 Hello 10000 NULL +8 NULL 20 NULL World 5 World 10000 NULL +9 NULL 20 NULL Hello World 11 Hello World 10000 NULL +INSERT INTO t1(a, b, c, h) VALUES(0, 7, 40, 2000), (0, 7, 40, 20000); +SELECT * FROM t1; +a b c d e f g h i +1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001 +2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002 +3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003 +4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004 +5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005 +6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006 +7 NULL 20 NULL Hello 5 Hello 10000 NULL +8 NULL 20 NULL World 5 World 10000 NULL +9 NULL 20 NULL Hello World 11 Hello World 10000 NULL +10 7 40 14 NULL NULL NULL 2000 4007 +11 7 40 14 NULL NULL NULL 20000 40007 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` int DEFAULT NULL, + `c` bigint NOT NULL, + `d` int GENERATED ALWAYS AS ((`b` * 2)) VIRTUAL, + `e` varchar(150) DEFAULT NULL, + `f` int GENERATED ALWAYS AS (length(`e`)) VIRTUAL, + `g` varchar(100) GENERATED ALWAYS AS (`e`) VIRTUAL, + `h` bigint DEFAULT '10000', + `i` bigint GENERATED ALWAYS AS (((`h` * 2) + `b`)) VIRTUAL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC +DROP TABLE t1; +# +# Scenario 3: +# Create a small table, add some columns, then change +# their default values, check original default values are correct +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world', ALGORITHM=copy; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN c BIGINT not null, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +INSERT INTO t1(a, b, c, e) VALUES(0, 6, 200, 'Good day'), (0, 7, 300, 'Good DAY'); +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +ALTER TABLE t1 ALTER COLUMN c SET DEFAULT 500; +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +INSERT INTO t1(a, b) VALUES(0, 8), (0, 9); +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +8 8 500 1008 NULL +9 9 500 1009 NULL +ALTER TABLE t1 ALTER COLUMN e SET DEFAULT 'HELLO MySQL!'; +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +8 8 500 1008 NULL +9 9 500 1009 NULL +INSERT INTO t1(a, b) VALUES(0, 10), (0, 20); +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +8 8 500 1008 NULL +9 9 500 1009 NULL +10 10 500 1010 HELLO MySQL! +11 20 500 1020 HELLO MySQL! +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` int DEFAULT NULL, + `c` bigint NOT NULL DEFAULT '500', + `d` int GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL, + `e` varchar(150) DEFAULT 'HELLO MySQL!', + PRIMARY KEY (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC +DROP TABLE t1; +# +# Scenario 4: +# Create a small table, add some columns instantly, then do DML +# on the table +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world', ALGORITHM=copy; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN c BIGINT NOT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; +UPDATE t1 SET c = 200 WHERE a > 3; +SELECT distinct(c) FROM t1; +c +100 +200 +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +DELETE FROM t1 WHERE c = 100; +UPDATE t1 SET c = 300; +SELECT distinct(c) FROM t1; +c +300 +SELECT count(*) FROM t1; +count(*) +16 +ALTER TABLE t1 ADD COLUMN t DATETIME DEFAULT CURRENT_TIMESTAMP, ALGORITHM=instant; +Table id did not change +count(*) = 1 +1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +UPDATE t1 SET e = 'Hello MySQL' WHERE a > 10; +UPDATE t1 SET e = 'Hello MySQL!!' WHERE a > 20; +SELECT distinct(e) FROM t1; +e +Hello world +Hello MySQL +Hello MySQL!! +UPDATE t1 SET c = 500 WHERE e LIKE '%world%'; +SELECT c, e FROM t1 GROUP BY c, e; +c e +500 Hello world +300 Hello MySQL +300 Hello MySQL!! +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +UPDATE t1 SET t = CURRENT_TIMESTAMP WHERE a < 50; +SELECT count(t) FROM t1 GROUP BY t; +count(t) +16 +16 +DELETE FROM t1 WHERE a < 50; +SELECT count(t) FROM t1 GROUP BY t; +count(t) +16 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` int DEFAULT NULL, + `c` bigint NOT NULL, + `d` int GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL, + `e` varchar(150) DEFAULT NULL, + `t` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC +DROP TABLE t1; +# +# Scenario 5: +# Create a small table, add some columns and modify them instantly, then do DDL +# to build indexes +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=DYNAMIC; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world', ALGORITHM=copy; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN c BIGINT NOT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; +ALTER TABLE t1 ADD KEY(c); +EXPLAIN SELECT c FROM t1; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL index NULL c # NULL # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`c` AS `c` from `test`.`t1` +SELECT c FROM t1 WHERE c != 100; +c +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +UPDATE t1 SET e = 'Hello MySQL' WHERE a > 30; +ALTER TABLE t1 ADD KEY(e); +EXPLAIN SELECT e FROM t1; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL index NULL e # NULL # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`e` AS `e` from `test`.`t1` +SELECT count(e) FROM t1 WHERE e LIKE '%MySQL%'; +count(e) +17 +SELECT count(e) FROM t1 WHERE e LIKE '%world%'; +count(e) +23 +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a, c); +SELECT a, c, e FROM t1 WHERE a > 25 AND a < 40; +a c e +28 100 Hello world +29 100 Hello world +30 100 Hello world +31 100 Hello MySQL +32 100 Hello MySQL +33 100 Hello MySQL +34 100 Hello MySQL +35 100 Hello MySQL +36 100 Hello MySQL +37 100 Hello MySQL +38 100 Hello MySQL +39 100 Hello MySQL +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` int DEFAULT NULL, + `c` bigint NOT NULL, + `d` int GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL, + `e` varchar(150) DEFAULT NULL, + PRIMARY KEY (`a`,`c`), + KEY `c` (`c`), + KEY `e` (`e`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC +DROP TABLE t1; +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad char(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad char(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +Table Checksum +test.sbtest1 4210958505 +check table sbtest1; +Table Op Msg_type Msg_text +test.sbtest1 check status OK +select pad from sbtest1; +pad +bbb +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +drop table sbtest1; +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad char(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad varchar(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +Table Checksum +test.sbtest1 465585826 +check table sbtest1; +Table Op Msg_type Msg_text +test.sbtest1 check status OK +select pad from sbtest1; +pad +bbb +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +drop table sbtest1; +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad varchar(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad char(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +Table Checksum +test.sbtest1 4210958505 +check table sbtest1; +Table Op Msg_type Msg_text +test.sbtest1 check status OK +select pad from sbtest1; +pad +bbb +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +drop table sbtest1; +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad varchar(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad varchar(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +Table Checksum +test.sbtest1 465585826 +check table sbtest1; +Table Op Msg_type Msg_text +test.sbtest1 check status OK +select pad from sbtest1; +pad +bbb +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +drop table sbtest1; +############################################ +# Test instant MODIFY COLUMN for COMPACT format +############################################ +# +# Scenario 1: +# Create a small table, and modify all kinds of columns and verify +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 MODIFY COLUMN a BIGINT AUTO_INCREMENT, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +ALTER TABLE t1 MODIFY COLUMN b BIGINT, ALGORITHM=INSTANT; +INSERT INTO t1(a, b) VALUES(0, 1); +SELECT * FROM t1; +a b +1 1 +2 2 +3 3 +4 4 +5 5 +6 1 +ALTER TABLE t1 ADD COLUMN c3 INT NOT NULL DEFAULT 10, ALGORITHM=INSTANT; +INSERT INTO t1(a, c3) VALUES(0, 11); +SELECT * FROM t1; +a b c3 +1 1 10 +2 2 10 +3 3 10 +4 4 10 +5 5 10 +6 1 10 +7 NULL 11 +ALTER TABLE t1 ADD COLUMN c4 CHAR(50), ADD COLUMN c5 VARCHAR(100), ALGORITHM=INSTANT; +INSERT INTO t1(a, c4, c5) VALUES(0, 'ABCD EFGH', 'abcdefg hijklmn '); +SELECT * FROM t1; +a b c3 c4 c5 +1 1 10 NULL NULL +2 2 10 NULL NULL +3 3 10 NULL NULL +4 4 10 NULL NULL +5 5 10 NULL NULL +6 1 10 NULL NULL +7 NULL 11 NULL NULL +8 NULL 10 ABCD EFGH abcdefg hijklmn +ALTER TABLE t1 MODIFY COLUMN c4 CHAR(100), ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +INSERT INTO t1(a, c4, c5) VALUES(0, 'ABCD EFGH', 'abcdefg hijklmn '); +SELECT * FROM t1; +a b c3 c4 c5 +1 1 10 NULL NULL +2 2 10 NULL NULL +3 3 10 NULL NULL +4 4 10 NULL NULL +5 5 10 NULL NULL +6 1 10 NULL NULL +7 NULL 11 NULL NULL +8 NULL 10 ABCD EFGH abcdefg hijklmn +9 NULL 10 ABCD EFGH abcdefg hijklmn +ALTER TABLE t1 ADD COLUMN m1 CHAR(50) default 'The fox jumps over', ADD COLUMN m2 VARCHAR(50) DEFAULT 'The fox jumps over the lazy dog.', ALGORITHM=inplace; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN m1 CHAR(100), ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN m2 CHAR(100), ALGORITHM=INSTANT; +INSERT INTO t1(a, m1, m2) VALUES(0, 'over the lazy dog', 'The lazy dog jumps over the fox.'); +SELECT count(*) = max(a) FROM t1 WHERE m1 = 'The fox jumps over'; +count(*) = max(a) +1 +SELECT count(*) = max(a) FROM t1 WHERE m2 like 'The fox jumps%'; +count(*) = max(a) +1 +SELECT m1 FROM t1 WHERE m1 = 'over the lazy dog'; +m1 +over the lazy dog +SELECT m2 FROM t1 WHERE m2 like '%the fox.'; +m2 +The lazy dog jumps over the fox. +ALTER TABLE t1 ADD COLUMN n1 BINARY(10), ADD COLUMN n2 VARBINARY(10), ALGORITHM=inplace; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(a, n1, n2) VALUES(0, 0x010203040506070809, 0x102030405060708090); +ALTER TABLE t1 MODIFY COLUMN n1 BINARY(100), ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN n2 VARBINARY(100), ALGORITHM=INSTANT; +SELECT count(*) = max(a) FROM t1 WHERE n1 IS NULL; +count(*) = max(a) +1 +SELECT count(*) = max(a) FROM t1 WHERE n2 IS NULL; +count(*) = max(a) +1 +SELECT hex(n1) FROM t1 WHERE n1 = 0x01020304050607080900; +hex(n1) +SELECT hex(n2) FROM t1 WHERE n2 = 0x102030405060708090; +hex(n2) +102030405060708090 +ALTER TABLE t1 ADD COLUMN o1 BINARY(10) DEFAULT 0x11223344, ADD COLUMN o2 VARBINARY(10) DEFAULT 0x55667788, ALGORITHM=inplace; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN o1 BINARY(100), ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN o2 VARBINARY(100), ALGORITHM=INSTANT; +INSERT INTO t1(a, o1, o2) VALUES(0, 0x44332211, 0x88776655); +SELECT count(*) = max(a) FROM t1 WHERE o1 = 0x11223344000000000000; +count(*) = max(a) +NULL +SELECT count(*) = max(a) FROM t1 WHERE o2 = 0x55667788; +count(*) = max(a) +1 +SELECT hex(o1) FROM t1 WHERE o1 = 0x44332211000000000000; +hex(o1) +SELECT hex(o2) FROM t1 WHERE o2 = 0x88776655; +hex(o2) +88776655 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` bigint DEFAULT NULL, + `c3` int NOT NULL DEFAULT '10', + `c4` char(50) DEFAULT NULL, + `c5` varchar(100) DEFAULT NULL, + `m1` char(100) DEFAULT NULL, + `m2` char(100) DEFAULT NULL, + `n1` binary(100) DEFAULT NULL, + `n2` varbinary(100) DEFAULT NULL, + `o1` binary(100) DEFAULT NULL, + `o2` varbinary(100) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT +DROP TABLE t1; +# +# Scenario 2: +# Create a small table, modify some columns instantly, along with +# virtual columns +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 ADD COLUMN c INT NOT NULL, ADD COLUMN d INT GENERATED ALWAYS AS ((b * 2)) VIRTUAL, ALGORITHM=copy; +Table ID differed +count(*) = 1 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN c BIGINT not null, ALGORITHM=INSTANT; +INSERT INTO t1(a, b, c) VALUES(0, 6, 20); +SELECT * FROM t1; +a b c d +1 1 0 2 +2 2 0 4 +3 3 0 6 +4 4 0 8 +5 5 0 10 +6 6 20 12 +ALTER TABLE t1 ADD COLUMN e VARCHAR(100) DEFAULT 'ABCD EFGH', ADD COLUMN f INT GENERATED ALWAYS AS (LENGTH(e)), ALGORITHM=copy; +Table ID differed +count(*) = 1 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; +INSERT INTO t1(a, c, e) VALUES(0, 20, 'Hello'), (0, 20, 'World'), (0, 20, 'Hello World'); +SELECT * FROM t1; +a b c d e f +1 1 0 2 ABCD EFGH 9 +2 2 0 4 ABCD EFGH 9 +3 3 0 6 ABCD EFGH 9 +4 4 0 8 ABCD EFGH 9 +5 5 0 10 ABCD EFGH 9 +6 6 20 12 ABCD EFGH 9 +7 NULL 20 NULL Hello 5 +8 NULL 20 NULL World 5 +9 NULL 20 NULL Hello World 11 +ALTER TABLE t1 ADD COLUMN g VARCHAR(100) GENERATED ALWAYS AS (e), ADD COLUMN h BIGINT DEFAULT 10000, ADD COLUMN i BIGINT GENERATED ALWAYS AS (h * 2 + b), ALGORITHM=copy; +Table ID differed +count(*) = 1 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN g VARCHAR(150), ALGORITHM=INSTANT; +ERROR HY000: 'Changing the STORED status' is not supported for generated columns. +SELECT * FROM t1; +a b c d e f g h i +1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001 +2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002 +3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003 +4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004 +5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005 +6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006 +7 NULL 20 NULL Hello 5 Hello 10000 NULL +8 NULL 20 NULL World 5 World 10000 NULL +9 NULL 20 NULL Hello World 11 Hello World 10000 NULL +INSERT INTO t1(a, b, c, h) VALUES(0, 7, 40, 2000), (0, 7, 40, 20000); +SELECT * FROM t1; +a b c d e f g h i +1 1 0 2 ABCD EFGH 9 ABCD EFGH 10000 20001 +2 2 0 4 ABCD EFGH 9 ABCD EFGH 10000 20002 +3 3 0 6 ABCD EFGH 9 ABCD EFGH 10000 20003 +4 4 0 8 ABCD EFGH 9 ABCD EFGH 10000 20004 +5 5 0 10 ABCD EFGH 9 ABCD EFGH 10000 20005 +6 6 20 12 ABCD EFGH 9 ABCD EFGH 10000 20006 +7 NULL 20 NULL Hello 5 Hello 10000 NULL +8 NULL 20 NULL World 5 World 10000 NULL +9 NULL 20 NULL Hello World 11 Hello World 10000 NULL +10 7 40 14 NULL NULL NULL 2000 4007 +11 7 40 14 NULL NULL NULL 20000 40007 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` int DEFAULT NULL, + `c` bigint NOT NULL, + `d` int GENERATED ALWAYS AS ((`b` * 2)) VIRTUAL, + `e` varchar(150) DEFAULT NULL, + `f` int GENERATED ALWAYS AS (length(`e`)) VIRTUAL, + `g` varchar(100) GENERATED ALWAYS AS (`e`) VIRTUAL, + `h` bigint DEFAULT '10000', + `i` bigint GENERATED ALWAYS AS (((`h` * 2) + `b`)) VIRTUAL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT +DROP TABLE t1; +# +# Scenario 3: +# Create a small table, add some columns, then change +# their default values, check original default values are correct +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world', ALGORITHM=copy; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN c BIGINT not null, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +INSERT INTO t1(a, b, c, e) VALUES(0, 6, 200, 'Good day'), (0, 7, 300, 'Good DAY'); +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +ALTER TABLE t1 ALTER COLUMN c SET DEFAULT 500; +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +INSERT INTO t1(a, b) VALUES(0, 8), (0, 9); +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +8 8 500 1008 NULL +9 9 500 1009 NULL +ALTER TABLE t1 ALTER COLUMN e SET DEFAULT 'HELLO MySQL!'; +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +8 8 500 1008 NULL +9 9 500 1009 NULL +INSERT INTO t1(a, b) VALUES(0, 10), (0, 20); +SELECT * FROM t1; +a b c d e +1 1 100 201 Hello world +2 2 100 202 Hello world +3 3 100 203 Hello world +4 4 100 204 Hello world +5 5 100 205 Hello world +6 6 200 406 Good day +7 7 300 607 Good DAY +8 8 500 1008 NULL +9 9 500 1009 NULL +10 10 500 1010 HELLO MySQL! +11 20 500 1020 HELLO MySQL! +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` int DEFAULT NULL, + `c` bigint NOT NULL DEFAULT '500', + `d` int GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL, + `e` varchar(150) DEFAULT 'HELLO MySQL!', + PRIMARY KEY (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT +DROP TABLE t1; +# +# Scenario 4: +# Create a small table, add some columns instantly, then do DML +# on the table +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world', ALGORITHM=copy; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN c BIGINT NOT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; +UPDATE t1 SET c = 200 WHERE a > 3; +SELECT distinct(c) FROM t1; +c +100 +200 +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +DELETE FROM t1 WHERE c = 100; +UPDATE t1 SET c = 300; +SELECT distinct(c) FROM t1; +c +300 +SELECT count(*) FROM t1; +count(*) +16 +ALTER TABLE t1 ADD COLUMN t DATETIME DEFAULT CURRENT_TIMESTAMP, ALGORITHM=instant; +Table id did not change +count(*) = 1 +1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +UPDATE t1 SET e = 'Hello MySQL' WHERE a > 10; +UPDATE t1 SET e = 'Hello MySQL!!' WHERE a > 20; +SELECT distinct(e) FROM t1; +e +Hello world +Hello MySQL +Hello MySQL!! +UPDATE t1 SET c = 500 WHERE e LIKE '%world%'; +SELECT c, e FROM t1 GROUP BY c, e; +c e +500 Hello world +300 Hello MySQL +300 Hello MySQL!! +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +UPDATE t1 SET t = CURRENT_TIMESTAMP WHERE a < 50; +SELECT count(t) FROM t1 GROUP BY t; +count(t) +16 +16 +DELETE FROM t1 WHERE a < 50; +SELECT count(t) FROM t1 GROUP BY t; +count(t) +16 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` int DEFAULT NULL, + `c` bigint NOT NULL, + `d` int GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL, + `e` varchar(150) DEFAULT NULL, + `t` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`a`) +) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT +DROP TABLE t1; +# +# Scenario 5: +# Create a small table, add some columns and modify them instantly, then do DDL +# to build indexes +# +CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT; +INSERT INTO t1 VALUES(0, 1), (0, 2), (0, 3), (0, 4), (0, 5); +ALTER TABLE t1 ADD COLUMN c INT NOT NULL DEFAULT 100, ADD COLUMN d INT GENERATED ALWAYS AS ((c * 2 + b)) VIRTUAL, ADD COLUMN e VARCHAR(100) DEFAULT 'Hello world', ALGORITHM=copy; +Table ID differed +count(*) = 2 +0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +ALTER TABLE t1 MODIFY COLUMN c BIGINT NOT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY COLUMN e VARCHAR(150), ALGORITHM=INSTANT; +ALTER TABLE t1 ADD KEY(c); +EXPLAIN SELECT c FROM t1; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL index NULL c # NULL # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`c` AS `c` from `test`.`t1` +SELECT c FROM t1 WHERE c != 100; +c +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +INSERT INTO t1(b, c, e) SELECT b, c, e FROM t1; +UPDATE t1 SET e = 'Hello MySQL' WHERE a > 30; +ALTER TABLE t1 ADD KEY(e); +EXPLAIN SELECT e FROM t1; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL index NULL e # NULL # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`e` AS `e` from `test`.`t1` +SELECT count(e) FROM t1 WHERE e LIKE '%MySQL%'; +count(e) +17 +SELECT count(e) FROM t1 WHERE e LIKE '%world%'; +count(e) +23 +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a, c); +SELECT a, c, e FROM t1 WHERE a > 25 AND a < 40; +a c e +28 100 Hello world +29 100 Hello world +30 100 Hello world +31 100 Hello MySQL +32 100 Hello MySQL +33 100 Hello MySQL +34 100 Hello MySQL +35 100 Hello MySQL +36 100 Hello MySQL +37 100 Hello MySQL +38 100 Hello MySQL +39 100 Hello MySQL +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int NOT NULL AUTO_INCREMENT, + `b` int DEFAULT NULL, + `c` bigint NOT NULL, + `d` int GENERATED ALWAYS AS (((`c` * 2) + `b`)) VIRTUAL, + `e` varchar(150) DEFAULT NULL, + PRIMARY KEY (`a`,`c`), + KEY `c` (`c`), + KEY `e` (`e`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT +DROP TABLE t1; +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad char(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad char(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +Table Checksum +test.sbtest1 4210958505 +check table sbtest1; +Table Op Msg_type Msg_text +test.sbtest1 check status OK +select pad from sbtest1; +pad +bbb +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +drop table sbtest1; +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad char(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad varchar(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +Table Checksum +test.sbtest1 465585826 +check table sbtest1; +Table Op Msg_type Msg_text +test.sbtest1 check status OK +select pad from sbtest1; +pad +bbb +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +drop table sbtest1; +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad varchar(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad char(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +Table Checksum +test.sbtest1 4210958505 +check table sbtest1; +Table Op Msg_type Msg_text +test.sbtest1 check status OK +select pad from sbtest1; +pad +bbb +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +drop table sbtest1; +CREATE TABLE sbtest1 (id int(11) NOT NULL AUTO_INCREMENT, k int(11) NOT NULL DEFAULT '0', c char(120) NOT NULL DEFAULT '', pad varchar(60) NOT NULL DEFAULT '', PRIMARY KEY (id), KEY k_1 (k),key index_2(k, c)) DEFAULT CHARSET=cp1251; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into sbtest1 values(1,1,'aaa','bbb'),(2,2,'aaa',repeat('c',60)); +alter table sbtest1 modify column pad varchar(100) not null default 'fdsa', algorithm=instant; +checksum table sbtest1; +Table Checksum +test.sbtest1 465585826 +check table sbtest1; +Table Op Msg_type Msg_text +test.sbtest1 check status OK +select pad from sbtest1; +pad +bbb +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +drop table sbtest1; diff --git a/mysql-test/suite/innodb/r/instant_modify_limitations.result b/mysql-test/suite/innodb/r/instant_modify_limitations.result new file mode 100644 index 00000000000..27251cd8709 --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_limitations.result @@ -0,0 +1,352 @@ +# +# Scenario 1: +# Create a small table with row_format compressed and modify instant column should fail +# +CREATE TABLE t1 (a INT, b INT) ROW_FORMAT=COMPRESSED; +INSERT INTO t1 VALUES(1, 1), (2, 2), (3, 3), (4, 4), (5, 5); +ALTER TABLE t1 modify b bigint, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +DROP TABLE t1; +# +# Scenario 2: +# Create a temporary table and adding instant column should fail +# +CREATE TEMPORARY TABLE tmp1(a int, b int); +ALTER TABLE tmp1 modify b int, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY. +DROP TABLE tmp1; +# +# Scenario 3: +# not support change to a larger length +# +CREATE TABLE t1(id int primary key, b int); +INSERT INTO t1 VALUES(1, 1), (2, 2), (3, 3), (4, 4), (5, 5); +ALTER TABLE t1 modify b smallint, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +DROP TABLE t1; +# +# Scenario 4: +# not support change to a smaller length +# +create table t1 (id int not null auto_increment primary key, +a binary(10), +b varbinary(10), +c binary(10), +d varbinary(10), +e bit(10), +f int, +g decimal(5,2)) default character set utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); +alter table t1 modify a binary(20), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +# not support change to smaller length +alter table t1 modify b binary(8), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +# not support change to smaller length +alter table t1 modify c varbinary(8), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +# not support change to smaller length +alter table t1 modify d varbinary(8), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +# not support bit +alter table t1 modify e binary(20), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +# not support decimal +alter table t1 modify g decimal(10,3), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +drop table t1; +# +# Scenario 5: +# not support change to different types +# +create table t1 (id int not null auto_increment primary key, +a binary(10), +b varbinary(10), +c binary(10), +d varbinary(10), +e bit(10), +f int, +g decimal(5,2)) default character set utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); +# not support binary->varchar +alter table t1 modify a varchar(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support varbinary->varchar +alter table t1 modify b varchar(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support binary->char +alter table t1 modify c char(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support varbinary->char +alter table t1 modify d char(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +drop table t1; +create table t1 (id int not null auto_increment primary key, +a char(10), +b varchar(10), +c char(10), +d varchar(10), +e bit(10), +f int, +g decimal(5,2)) default character set utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); +# not support char->varbinary +alter table t1 modify a varbinary(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support varchar->varbinary +alter table t1 modify b varbinary(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support char->binary +alter table t1 modify c binary(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support varchar->binary +alter table t1 modify d binary(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support int->char +alter table t1 modify f char(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support char->int +alter table t1 modify f char(100), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +drop table t1; +# +# Scenario 6: +# not support change nullable, charset, default +# +create table t1 (id int not null auto_increment primary key, +a binary(10) not null, +b varbinary(10), +c char(10) CHARACTER SET utf8, +d varchar(10) CHARACTER SET latin1, +e bit(10), +f int, +g decimal(5,2)) default character set utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); +# not support change nullable +alter table t1 modify a binary(100) null, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support change nullable +alter table t1 modify b binary (100) not null, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support change charset +alter table t1 modify c char(100) CHARACTER SET latin1, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support change charset +alter table t1 modify d char(100) CHARACTER SET utf8, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# not support signed +alter table t1 modify f bigint unsigned, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +drop table t1; +# +# Scenario 7: +# not support change one column mutiple times +# +create table t1 (id int not null auto_increment primary key, +a binary(10) not null, +b varbinary(10), +c char(10) CHARACTER SET utf8, +d varchar(10) CHARACTER SET latin1, +e bit(10), +f int, +g decimal(5,2)) default character set utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); +# support change first time +alter table t1 modify a binary(100) not null, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +# not support change second time +alter table t1 modify a binary(200) not null, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +# support change first time +alter table t1 modify b binary(20), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +2 +# not support change second time +alter table t1 modify b varbinary(30), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +2 +# support change default +alter table t1 modify f bigint default 100, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +3 +# support change default +alter table t1 modify f bigint default 10, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +3 +drop table t1; +# +# Scenario 8: +# not support change indexed columns +# +CREATE TABLE t1(a int primary key, b int, c char(10) unique); +INSERT INTO t1 VALUES(1, 1, 'a'), (2, 2, 'b'), (3, 3, 'c'), (4, 4, 'd'), (5, 5, 'e'); +ALTER TABLE t1 modify b bigint, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +ALTER TABLE t1 modify a bigint, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +ALTER TABLE t1 modify c char(12), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +select * from t1; +a b c +1 1 a +2 2 b +3 3 c +4 4 d +5 5 e +DROP TABLE t1; +# +# Scenario 9: +# only support instant modify column, other the drop, add col, add/drop index +# +create table t1 (id int, +a binary(10), +b varbinary(10), +c int); +insert into t1 values(1, 'a', 'b', 1); +alter table t1 modify c bigint, add d int, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +alter table t1 modify b binary(20), add index idx(a), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int DEFAULT NULL, + `a` binary(10) DEFAULT NULL, + `b` varbinary(10) DEFAULT NULL, + `c` int DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +alter table t1 add column c1 int, ALGORITHM=INSTANT; +select count(*) from information_schema.innodb_tables where instant_cols <> 0; +count(*) +0 +insert into t1 values(3, null, null, -1, -1); +alter table t1 modify column c1 bigint, algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int DEFAULT NULL, + `a` binary(10) DEFAULT NULL, + `b` varbinary(10) DEFAULT NULL, + `c` int DEFAULT NULL, + `c1` int DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +drop table t1; +create table t1 (id INT AUTO_INCREMENT PRIMARY KEY, c1 DATE,c2 ENUM('1', '2', '3', 'f'), c3 SET('a', 'b', 'c')); +insert into t1 values (1, '2022-10-10 12:43:47', '1', 'a,c'); +insert into t1 values (2, '2022-10-10 12:43:47', '2', 'b'); +insert into t1 values (3, '2022-10-10 12:43:47', '2', 'a,b,c'); +insert into t1 values (4, '2022-10-10 12:43:47', '2', 'b'); +alter table t1 modify c2 ENUM('1', '2', '3', 'g'), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +alter table t1 modify c3 SET('a', 'b', 'e', 'f'), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Need to rebuild the table to change column type. Try ALGORITHM=COPY/INPLACE. +alter table t1 modify c3 SET('a', 'b', 'c', 'e', 'f'), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +drop table t1; diff --git a/mysql-test/suite/innodb/r/instant_modify_row_size.result b/mysql-test/suite/innodb/r/instant_modify_row_size.result new file mode 100644 index 00000000000..27ae2006597 --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_row_size.result @@ -0,0 +1,3063 @@ +call mtr.add_suppression("Cannot add field"); +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(2), +c26 char(2), +c27 char(2), +c28 char(2), +c29 char(2), +c30 char(2), +c31 char(2), +c32 char(2), +c33 char(2), +c34 char(2), +c35 char(2), +c36 char(2), +c37 char(2), +c38 char(2), +c39 char(2), +c40 char(2), +c41 char(2), +c42 char(2), +c43 char(2), +c44 char(2), +c45 char(2), +c46 char(2), +c47 char(2), +c48 char(2), +c49 char(2), +c50 char(2), +c51 char(2), +c52 char(2), +c53 char(2), +c54 char(2), +c55 char(2), +c56 char(2), +c57 char(2), +c58 char(2), +c59 char(2), +c60 char(2), +c61 char(2), +c62 char(2), +c63 char(2), +c64 char(2), +c65 char(2), +c66 char(2), +c67 char(2), +c68 char(2), +c69 char(2), +c70 char(2), +c71 char(2), +c72 char(2), +c73 char(2), +c74 char(2), +c75 char(2), +c76 char(2), +c77 char(2), +c78 char(2), +c79 char(2), +c80 char(2), +c81 char(2), +c82 char(2), +c83 char(2), +c84 char(2), +c85 char(2), +c86 char(2), +c87 char(2), +c88 char(2), +c89 char(2), +c90 char(2), +c91 char(2), +c92 char(2), +c93 char(2), +c94 char(2), +c95 char(2), +c96 char(2), +c97 char(2), +c98 char(2), +c99 char(2), +c100 char(2), +c101 char(2), +c102 char(2), +c103 char(2), +c104 char(2), +c105 char(2), +c106 char(2), +c107 char(2), +c108 char(2), +c109 char(2), +c110 char(2), +c111 char(2), +c112 char(2), +c113 char(2), +c114 char(2), +c115 char(2), +c116 char(2), +c117 char(2), +c118 char(2), +c119 char(2), +c120 char(2), +c121 char(2), +c122 char(2), +c123 char(2), +c124 char(2), +c125 char(2), +c126 char(2), +c127 char(2), +c128 char(2), +c129 char(2), +c130 char(2), +c131 char(2), +c132 char(2), +c133 char(2), +c134 char(2), +c135 char(2), +c136 char(2), +c137 char(2), +c138 char(2), +c139 char(2), +c140 char(2), +c141 char(2), +c142 char(2), +c143 char(2), +c144 char(2), +c145 char(2), +c146 char(2), +c147 char(2), +c148 char(2), +c149 char(2), +c150 char(2), +c151 char(2), +c152 char(2), +c153 char(2), +c154 char(2), +c155 char(2), +c156 char(2), +c157 char(2), +c158 char(2), +c159 char(2), +c160 char(2), +c161 char(2), +c162 char(2), +c163 char(2), +c164 char(2), +c165 char(2), +c166 char(2), +c167 char(2), +c168 char(2), +c169 char(2), +c170 char(2), +c171 char(2), +c172 char(2), +c173 char(2), +c174 char(2), +c175 char(2), +c176 char(2), +c177 char(2), +c178 char(2), +c179 char(2), +c180 char(2), +c181 char(2), +c182 char(2), +c183 char(2), +c184 char(2), +c185 char(2), +c186 char(2), +c187 char(2), +c188 char(2), +c189 char(2), +c190 char(2), +c191 char(2), +c192 char(2), +c193 char(2), +c194 char(2), +c195 char(2), +c196 char(2), +c197 char(2), +c198 char(2), +c199 char(2), +c200 char(2), +c201 char(2), +c202 char(2), +c203 char(2), +c204 char(2), +c205 char(2), +c206 char(2), +c207 char(2), +c208 char(2), +c209 char(2), +c210 char(2), +c211 char(2), +c212 char(2), +c213 char(2), +c214 char(2), +c215 char(2), +c216 char(2), +c217 char(2), +c218 char(2), +c219 char(2), +c220 char(2), +c221 char(2), +c222 char(2), +c223 char(2), +c224 char(2), +c225 char(2), +c226 char(2), +c227 char(2), +c228 char(2), +c229 char(2), +c230 char(2), +c231 char(2), +c232 char(2), +c233 char(2), +c234 char(2), +c235 char(2), +c236 char(2), +c237 char(2), +c238 char(2), +c239 char(2), +c240 char(2), +c241 char(2), +c242 char(2), +c243 char(2), +c244 char(2), +c245 char(2), +c246 char(2), +c247 char(2), +c248 char(2), +c249 char(2), +c250 char(2), +c251 char(2), +c252 char(2), +c253 char(2), +c254 char(2), +c255 char(2), +c256 char(2), +c257 char(2), +c258 char(2), +c259 char(2), +c260 char(2), +c261 char(2), +c262 char(2), +c263 char(2), +c264 char(2), +c265 char(2), +c266 char(2), +c267 char(2), +c268 char(2), +c269 char(2), +c270 char(2), +c271 char(2), +c272 char(2), +c273 char(2), +c274 char(2), +c275 char(2), +c276 char(2), +c277 char(2), +c278 char(2), +c279 char(2), +c280 char(2), +c281 char(2), +c282 char(2), +c283 char(2), +c284 char(2), +c285 char(2), +c286 char(2), +c287 char(2), +c288 char(2), +c289 char(2), +c290 char(2), +c291 char(2), +c292 char(2), +c293 char(2), +c294 char(2), +c295 char(2), +c296 char(2), +c297 char(2), +c298 char(2), +c299 char(2), +c300 char(2), +c301 char(2), +c302 char(2), +c303 char(2), +c304 char(2), +c305 char(2), +c306 char(2), +c307 char(2), +c308 char(2), +c309 char(2), +c310 char(2), +c311 char(2), +c312 char(2), +c313 char(2), +c314 char(2), +c315 char(2), +c316 char(2), +c317 char(2), +c318 char(2), +c319 char(2), +c320 char(2), +c321 char(2), +c322 char(2), +c323 char(2), +c324 char(2), +c325 char(2), +c326 char(2), +c327 char(2), +c328 char(2), +c329 char(2), +c330 char(2), +c331 char(2), +c332 char(2), +c333 char(2), +c334 char(2), +c335 char(2), +c336 char(2), +c337 char(2), +c338 char(2), +c339 char(2), +c340 char(2), +c341 char(2), +c342 char(2), +c343 char(2), +c344 char(2), +c345 char(2), +c346 char(2), +c347 char(2), +c348 char(2), +c349 char(2), +c350 char(2), +c351 char(2), +c352 char(2), +c353 char(2), +c354 char(2), +c355 char(2), +c356 char(2), +c357 char(2), +c358 char(2), +c359 char(2), +c360 char(2), +c361 char(2), +c362 char(2), +c363 char(2), +c364 char(2), +c365 char(2), +c366 char(2), +c367 char(2), +c368 char(2), +c369 char(2), +c370 char(2), +c371 char(2), +c372 char(2), +c373 char(2), +c374 char(2), +c375 char(2), +c376 char(2), +c377 char(2), +c378 char(2), +c379 char(2), +c380 char(2), +c381 char(2), +c382 char(2), +c383 char(2), +c384 char(2), +c385 char(2), +c386 char(2), +c387 char(2), +c388 char(2), +c389 char(2), +c390 char(2), +c391 char(2), +c392 char(2), +c393 char(2), +c394 char(2), +c395 char(2), +c396 char(2), +c397 char(2), +c398 char(2), +c399 char(2), +c400 char(2), +c401 char(2), +c402 char(2), +c403 char(2), +c404 char(2), +c405 char(2), +c406 char(2), +c407 char(2), +c408 char(2), +c409 char(2), +c410 char(2), +c411 char(2), +c412 char(2), +c413 char(2), +c414 char(2), +c415 char(2), +c416 char(2), +c417 char(2), +c418 char(2), +c419 char(2), +c420 char(2), +c421 char(2), +c422 char(2), +c423 char(2), +c424 char(2), +c425 char(2), +c426 char(2), +c427 char(2), +c428 char(2), +c429 char(2), +c430 char(2), +c431 char(2), +c432 char(2), +c433 char(2), +c434 char(2), +c435 char(2), +c436 char(2), +c437 char(2), +c438 char(2), +c439 char(2), +c440 char(2), +c441 char(2), +c442 char(2), +c443 char(2), +c444 char(2), +c445 char(2), +c446 char(2), +c447 char(2), +c448 char(2), +c449 char(2), +c450 char(2), +c451 char(2), +c452 char(2), +c453 char(2), +c454 char(2), +c455 char(2), +c456 char(2), +c457 char(2), +c458 char(2), +c459 char(2), +c460 char(2), +c461 char(2), +c462 char(2), +c463 char(2), +c464 char(2), +c465 char(2), +c466 char(2), +c467 char(2), +c468 char(2), +c469 char(2), +c470 char(2), +c471 char(2), +c472 char(2), +c473 char(2), +c474 char(2), +c475 char(2), +c476 char(2), +c477 char(2), +c478 char(2), +c479 char(2), +c480 char(2), +c481 char(2), +c482 char(2), +c483 char(2), +c484 char(2), +c485 char(2), +c486 char(2), +c487 char(2), +c488 char(2), +c489 char(2), +c490 char(2), +c491 char(2), +c492 char(2), +c493 char(2), +c494 char(2), +c495 char(2), +c496 char(2), +c497 char(2), +c498 char(2), +c499 char(2), +c500 char(2), +c501 char(2), +c502 char(2), +c503 char(2), +c504 char(2), +c505 char(2), +c506 char(2), +c507 char(2), +c508 char(2), +c509 char(2), +c510 char(2), +c511 char(2), +c512 char(2), +c513 char(2), +c514 char(2), +c515 char(2), +c516 char(2), +c517 char(2), +c518 char(2), +c519 char(2), +c520 char(2), +c521 char(2), +c522 char(2), +c523 char(2), +c524 char(2), +c525 char(2), +c526 char(2), +c527 char(2), +c528 char(2), +c529 char(2), +c530 char(2), +c531 char(2), +c532 char(2), +c533 char(2), +c534 char(2), +c535 char(2), +c536 char(2), +c537 char(2), +c538 char(2), +c539 char(2), +c540 char(2), +c541 char(2), +c542 char(2), +c543 char(2), +c544 char(2), +c545 char(2), +c546 char(2), +c547 char(2), +c548 char(2), +c549 char(2), +c550 char(2), +c551 char(2), +c552 char(2), +c553 char(2), +c554 char(2), +c555 char(2), +c556 char(2), +c557 char(2), +c558 char(2), +c559 char(2), +c560 char(2), +c561 char(2), +c562 char(2), +c563 char(2), +c564 char(2), +c565 char(2), +c566 char(2), +c567 char(2), +c568 char(2), +c569 char(2), +c570 char(2), +c571 char(2), +c572 char(2), +c573 char(2), +c574 char(2), +c575 char(2), +c576 char(2), +c577 char(2), +c578 char(2), +c579 char(2), +c580 char(2), +c581 char(2), +c582 char(2), +c583 char(2), +c584 char(2), +c585 char(2), +c586 char(2), +c587 char(2), +c588 char(2), +c589 char(2), +c590 char(2), +c591 char(2), +c592 char(2), +c593 char(2), +c594 char(2), +c595 char(2), +c596 char(2), +c597 char(2), +c598 char(2), +c599 char(2), +c600 char(2), +c601 char(2), +c602 char(2), +c603 char(2), +c604 char(2), +c605 char(2), +c606 char(2), +c607 char(2), +c608 char(2), +c609 char(2), +c610 char(2), +c611 char(2), +c612 char(2), +c613 char(2), +c614 char(2), +c615 char(2), +c616 char(2), +c617 char(2), +c618 char(2), +c619 char(2), +c620 char(2), +c621 char(2), +c622 char(2), +c623 char(2), +c624 char(2), +c625 char(2), +c626 char(2), +c627 char(2), +c628 char(2), +c629 char(2), +c630 char(2), +c631 char(2), +c632 char(2), +c633 char(2), +c634 char(2), +c635 char(2), +c636 char(2), +c637 char(2), +c638 char(2), +c639 char(2), +c640 char(2), +c641 char(2), +c642 char(2), +c643 char(2), +c644 char(2), +c645 char(2), +c646 char(2), +c647 char(2), +c648 char(2), +c649 char(2), +c650 char(2), +c651 char(2), +c652 char(2), +c653 char(2), +c654 char(2), +c655 char(2), +c656 char(2), +c657 char(2), +c658 char(2), +c659 char(2), +c660 char(2), +c661 char(2), +c662 char(2), +c663 char(2), +c664 char(2), +c665 char(2), +c666 char(2), +c667 char(2), +c668 char(2), +c669 char(2), +c670 char(2), +c671 char(2), +c672 char(2), +c673 char(2), +c674 char(2), +c675 char(2), +c676 char(2), +c677 char(2), +c678 char(2), +c679 char(2), +c680 char(2), +c681 char(2), +c682 char(2), +c683 char(2), +c684 char(2), +c685 char(2), +c686 char(2), +c687 char(2), +c688 char(2), +c689 char(2), +c690 char(2), +c691 char(2), +c692 char(2), +c693 char(2), +c694 char(2), +c695 char(2), +c696 char(2), +c697 char(2), +c698 char(2), +c699 char(2), +c700 char(2), +c701 char(2), +c702 char(2), +c703 char(2), +c704 char(2), +c705 char(2), +c706 char(2), +c707 char(2), +c708 char(2), +c709 char(2), +c710 char(2), +c711 char(2), +c712 char(2), +c713 char(2), +c714 char(2), +c715 char(2), +c716 char(2), +c717 char(2), +c718 char(2), +c719 char(2), +c720 char(2), +c721 char(2), +c722 char(2), +c723 char(2), +c724 char(2), +c725 char(2), +c726 char(2), +c727 char(2), +c728 char(2), +c729 char(2), +c730 char(2), +c731 char(2), +c732 char(2), +c733 char(2), +c734 char(2), +c735 char(2), +c736 char(2), +c737 char(2), +c738 char(2), +c739 char(2), +c740 char(2), +c741 char(2), +c742 char(2), +c743 char(2), +c744 char(2), +c745 char(2), +c746 char(2), +c747 char(2), +c748 char(2), +c749 char(2), +c750 char(2), +c751 char(2), +c752 char(2), +c753 char(2), +c754 char(2), +c755 char(2), +c756 char(2), +c757 char(2), +c758 char(2), +c759 char(2), +c760 char(2), +c761 char(2), +c762 char(2), +c763 char(2), +c764 char(2), +c765 char(2), +c766 char(2), +c767 char(2), +c768 char(2), +c769 char(2), +c770 char(2), +c771 char(2), +c772 char(2), +c773 char(2), +c774 char(2), +c775 char(2), +c776 char(2), +c777 char(2), +c778 char(2), +c779 char(2), +c780 char(2), +c781 char(2), +c782 char(2), +c783 char(2), +c784 char(2), +c785 char(2), +c786 char(2), +c787 char(2), +c788 char(2), +c789 char(2), +c790 char(2), +c791 char(2), +c792 char(2), +c793 char(2), +c794 char(2), +c795 char(2), +c796 char(2), +c797 char(2), +c798 char(2), +c799 char(2), +c800 char(2), +c801 char(2), +c802 char(2), +c803 char(2), +c804 char(2), +c805 char(2), +c806 char(2), +c807 char(2), +c808 char(2), +c809 char(2), +c810 char(2), +c811 char(2), +c812 char(2), +c813 char(2), +c814 char(2), +c815 char(2), +c816 char(2), +c817 char(2), +c818 char(2), +c819 char(2), +c820 char(2), +c821 char(2), +c822 char(2), +c823 char(2), +c824 char(2), +c825 char(2), +c826 char(2), +c827 char(2), +c828 char(2), +c829 char(2), +c830 char(2), +c831 char(2), +c832 char(2), +c833 char(2), +c834 char(2), +c835 char(2), +c836 char(2), +c837 char(2), +c838 char(2), +c839 char(2), +c840 char(2), +c841 char(2), +c842 char(2), +c843 char(2), +c844 char(2), +c845 char(2), +c846 char(2), +c847 char(2), +c848 char(2), +c849 char(2), +c850 char(2), +c851 char(2), +c852 char(2), +c853 char(2), +c854 char(2), +c855 char(2), +c856 char(2), +c857 char(2), +c858 char(2), +c859 char(2), +c860 char(2), +c861 char(2), +c862 char(2), +c863 char(2), +c864 char(2), +c865 char(2), +c866 char(2), +c867 char(2), +c868 char(2), +c869 char(2), +c870 char(2), +c871 char(2), +c872 char(2), +c873 char(2), +c874 char(2), +c875 char(2), +c876 char(2), +c877 char(2), +c878 char(2), +c879 char(2), +c880 char(2), +c881 char(2), +c882 char(2), +c883 char(2), +c884 char(2), +c885 char(2), +c886 char(2), +c887 char(2), +c888 char(2), +c889 char(2), +c890 char(2), +c891 char(2), +c892 char(2), +c893 char(2), +c894 char(2), +c895 char(2), +c896 char(2), +c897 char(2), +c898 char(2), +c899 char(2), +c900 char(2), +c901 char(2), +c902 char(2), +c903 char(2), +c904 char(2), +c905 char(2), +c906 char(2), +c907 char(2), +c908 char(2), +c909 char(2), +c910 char(2), +c911 char(2), +c912 char(2), +c913 char(2), +c914 char(2), +c915 char(2), +c916 char(2), +c917 char(2), +c918 char(2), +c919 char(2), +c920 char(2), +c921 char(2), +c922 char(2), +c923 char(2), +c924 char(2), +c925 char(2), +c926 char(2), +c927 char(2), +c928 char(2), +c929 char(2), +c930 char(2), +c931 char(2), +c932 char(2), +c933 char(2), +c934 char(2), +c935 char(2), +c936 char(2), +c937 char(2), +c938 char(2), +c939 char(2), +c940 char(2), +c941 char(2), +c942 char(2), +c943 char(2), +c944 char(2), +c945 char(2), +c946 char(2), +c947 char(2), +c948 char(2), +c949 char(2), +c950 char(2), +c951 char(2), +c952 char(2), +c953 char(2), +c954 char(2), +c955 char(2), +c956 char(2), +c957 char(2), +c958 char(2), +c959 char(2), +c960 char(2), +c961 char(2), +c962 char(2), +c963 char(2), +c964 char(2), +c965 char(2), +c966 char(2), +c967 char(2), +c968 char(2), +c969 char(2), +c970 char(2), +c971 char(2), +c972 char(2), +c973 char(2), +c974 char(2), +c975 char(2), +c976 char(2), +c977 char(2), +c978 char(2), +c979 char(2), +c980 char(2), +c981 char(2), +c982 char(2), +c983 char(2), +c984 char(2), +c985 char(2), +c986 char(2), +c987 char(2), +c988 char(2), +c989 char(2), +c990 char(2), +c991 char(2), +c992 char(2), +c993 char(2), +c994 char(2), +c995 char(2), +c996 char(2), +c997 char(2), +c998 char(2), +c999 char(2), +c1000 char(2), +c1001 char(2), +c1002 char(2), +c1003 char(2), +c1004 char(2), +c1005 char(2), +c1006 char(2), +c1007 char(2), +c1008 char(2), +c1009 char(2), +c1010 char(2), +c1011 char(2), +c1012 char(2), +c1013 char(2), +c1014 char(2), +c1015 char(2)) engine=innodb default character set=UTF8MB3; +Warnings: +Warning 1287 'utf8mb3' is deprecated and will be removed in a future release. Please use utf8mb4 instead +alter table t1 modify column c25 char(100), algorithm=instant; +alter table t1 modify column c26 char(250), algorithm=instant; +ERROR HY000: Column can't be modified with ALGORITHM=INSTANT as either max possible row size already crosses max permissible row size or may cross it after modify. Try ALGORITHM=INPLACE/COPY. +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` char(100) DEFAULT NULL, + `c2` char(100) DEFAULT NULL, + `c3` char(100) DEFAULT NULL, + `c4` char(100) DEFAULT NULL, + `c5` char(100) DEFAULT NULL, + `c6` char(100) DEFAULT NULL, + `c7` char(100) DEFAULT NULL, + `c8` char(100) DEFAULT NULL, + `c9` char(100) DEFAULT NULL, + `c10` char(100) DEFAULT NULL, + `c11` char(100) DEFAULT NULL, + `c12` char(100) DEFAULT NULL, + `c13` char(100) DEFAULT NULL, + `c14` char(100) DEFAULT NULL, + `c15` char(100) DEFAULT NULL, + `c16` char(100) DEFAULT NULL, + `c17` char(100) DEFAULT NULL, + `c18` char(100) DEFAULT NULL, + `c19` char(100) DEFAULT NULL, + `c20` char(100) DEFAULT NULL, + `c21` char(100) DEFAULT NULL, + `c22` char(100) DEFAULT NULL, + `c23` char(100) DEFAULT NULL, + `c24` char(100) DEFAULT NULL, + `c25` char(100) DEFAULT NULL, + `c26` char(2) DEFAULT NULL, + `c27` char(2) DEFAULT NULL, + `c28` char(2) DEFAULT NULL, + `c29` char(2) DEFAULT NULL, + `c30` char(2) DEFAULT NULL, + `c31` char(2) DEFAULT NULL, + `c32` char(2) DEFAULT NULL, + `c33` char(2) DEFAULT NULL, + `c34` char(2) DEFAULT NULL, + `c35` char(2) DEFAULT NULL, + `c36` char(2) DEFAULT NULL, + `c37` char(2) DEFAULT NULL, + `c38` char(2) DEFAULT NULL, + `c39` char(2) DEFAULT NULL, + `c40` char(2) DEFAULT NULL, + `c41` char(2) DEFAULT NULL, + `c42` char(2) DEFAULT NULL, + `c43` char(2) DEFAULT NULL, + `c44` char(2) DEFAULT NULL, + `c45` char(2) DEFAULT NULL, + `c46` char(2) DEFAULT NULL, + `c47` char(2) DEFAULT NULL, + `c48` char(2) DEFAULT NULL, + `c49` char(2) DEFAULT NULL, + `c50` char(2) DEFAULT NULL, + `c51` char(2) DEFAULT NULL, + `c52` char(2) DEFAULT NULL, + `c53` char(2) DEFAULT NULL, + `c54` char(2) DEFAULT NULL, + `c55` char(2) DEFAULT NULL, + `c56` char(2) DEFAULT NULL, + `c57` char(2) DEFAULT NULL, + `c58` char(2) DEFAULT NULL, + `c59` char(2) DEFAULT NULL, + `c60` char(2) DEFAULT NULL, + `c61` char(2) DEFAULT NULL, + `c62` char(2) DEFAULT NULL, + `c63` char(2) DEFAULT NULL, + `c64` char(2) DEFAULT NULL, + `c65` char(2) DEFAULT NULL, + `c66` char(2) DEFAULT NULL, + `c67` char(2) DEFAULT NULL, + `c68` char(2) DEFAULT NULL, + `c69` char(2) DEFAULT NULL, + `c70` char(2) DEFAULT NULL, + `c71` char(2) DEFAULT NULL, + `c72` char(2) DEFAULT NULL, + `c73` char(2) DEFAULT NULL, + `c74` char(2) DEFAULT NULL, + `c75` char(2) DEFAULT NULL, + `c76` char(2) DEFAULT NULL, + `c77` char(2) DEFAULT NULL, + `c78` char(2) DEFAULT NULL, + `c79` char(2) DEFAULT NULL, + `c80` char(2) DEFAULT NULL, + `c81` char(2) DEFAULT NULL, + `c82` char(2) DEFAULT NULL, + `c83` char(2) DEFAULT NULL, + `c84` char(2) DEFAULT NULL, + `c85` char(2) DEFAULT NULL, + `c86` char(2) DEFAULT NULL, + `c87` char(2) DEFAULT NULL, + `c88` char(2) DEFAULT NULL, + `c89` char(2) DEFAULT NULL, + `c90` char(2) DEFAULT NULL, + `c91` char(2) DEFAULT NULL, + `c92` char(2) DEFAULT NULL, + `c93` char(2) DEFAULT NULL, + `c94` char(2) DEFAULT NULL, + `c95` char(2) DEFAULT NULL, + `c96` char(2) DEFAULT NULL, + `c97` char(2) DEFAULT NULL, + `c98` char(2) DEFAULT NULL, + `c99` char(2) DEFAULT NULL, + `c100` char(2) DEFAULT NULL, + `c101` char(2) DEFAULT NULL, + `c102` char(2) DEFAULT NULL, + `c103` char(2) DEFAULT NULL, + `c104` char(2) DEFAULT NULL, + `c105` char(2) DEFAULT NULL, + `c106` char(2) DEFAULT NULL, + `c107` char(2) DEFAULT NULL, + `c108` char(2) DEFAULT NULL, + `c109` char(2) DEFAULT NULL, + `c110` char(2) DEFAULT NULL, + `c111` char(2) DEFAULT NULL, + `c112` char(2) DEFAULT NULL, + `c113` char(2) DEFAULT NULL, + `c114` char(2) DEFAULT NULL, + `c115` char(2) DEFAULT NULL, + `c116` char(2) DEFAULT NULL, + `c117` char(2) DEFAULT NULL, + `c118` char(2) DEFAULT NULL, + `c119` char(2) DEFAULT NULL, + `c120` char(2) DEFAULT NULL, + `c121` char(2) DEFAULT NULL, + `c122` char(2) DEFAULT NULL, + `c123` char(2) DEFAULT NULL, + `c124` char(2) DEFAULT NULL, + `c125` char(2) DEFAULT NULL, + `c126` char(2) DEFAULT NULL, + `c127` char(2) DEFAULT NULL, + `c128` char(2) DEFAULT NULL, + `c129` char(2) DEFAULT NULL, + `c130` char(2) DEFAULT NULL, + `c131` char(2) DEFAULT NULL, + `c132` char(2) DEFAULT NULL, + `c133` char(2) DEFAULT NULL, + `c134` char(2) DEFAULT NULL, + `c135` char(2) DEFAULT NULL, + `c136` char(2) DEFAULT NULL, + `c137` char(2) DEFAULT NULL, + `c138` char(2) DEFAULT NULL, + `c139` char(2) DEFAULT NULL, + `c140` char(2) DEFAULT NULL, + `c141` char(2) DEFAULT NULL, + `c142` char(2) DEFAULT NULL, + `c143` char(2) DEFAULT NULL, + `c144` char(2) DEFAULT NULL, + `c145` char(2) DEFAULT NULL, + `c146` char(2) DEFAULT NULL, + `c147` char(2) DEFAULT NULL, + `c148` char(2) DEFAULT NULL, + `c149` char(2) DEFAULT NULL, + `c150` char(2) DEFAULT NULL, + `c151` char(2) DEFAULT NULL, + `c152` char(2) DEFAULT NULL, + `c153` char(2) DEFAULT NULL, + `c154` char(2) DEFAULT NULL, + `c155` char(2) DEFAULT NULL, + `c156` char(2) DEFAULT NULL, + `c157` char(2) DEFAULT NULL, + `c158` char(2) DEFAULT NULL, + `c159` char(2) DEFAULT NULL, + `c160` char(2) DEFAULT NULL, + `c161` char(2) DEFAULT NULL, + `c162` char(2) DEFAULT NULL, + `c163` char(2) DEFAULT NULL, + `c164` char(2) DEFAULT NULL, + `c165` char(2) DEFAULT NULL, + `c166` char(2) DEFAULT NULL, + `c167` char(2) DEFAULT NULL, + `c168` char(2) DEFAULT NULL, + `c169` char(2) DEFAULT NULL, + `c170` char(2) DEFAULT NULL, + `c171` char(2) DEFAULT NULL, + `c172` char(2) DEFAULT NULL, + `c173` char(2) DEFAULT NULL, + `c174` char(2) DEFAULT NULL, + `c175` char(2) DEFAULT NULL, + `c176` char(2) DEFAULT NULL, + `c177` char(2) DEFAULT NULL, + `c178` char(2) DEFAULT NULL, + `c179` char(2) DEFAULT NULL, + `c180` char(2) DEFAULT NULL, + `c181` char(2) DEFAULT NULL, + `c182` char(2) DEFAULT NULL, + `c183` char(2) DEFAULT NULL, + `c184` char(2) DEFAULT NULL, + `c185` char(2) DEFAULT NULL, + `c186` char(2) DEFAULT NULL, + `c187` char(2) DEFAULT NULL, + `c188` char(2) DEFAULT NULL, + `c189` char(2) DEFAULT NULL, + `c190` char(2) DEFAULT NULL, + `c191` char(2) DEFAULT NULL, + `c192` char(2) DEFAULT NULL, + `c193` char(2) DEFAULT NULL, + `c194` char(2) DEFAULT NULL, + `c195` char(2) DEFAULT NULL, + `c196` char(2) DEFAULT NULL, + `c197` char(2) DEFAULT NULL, + `c198` char(2) DEFAULT NULL, + `c199` char(2) DEFAULT NULL, + `c200` char(2) DEFAULT NULL, + `c201` char(2) DEFAULT NULL, + `c202` char(2) DEFAULT NULL, + `c203` char(2) DEFAULT NULL, + `c204` char(2) DEFAULT NULL, + `c205` char(2) DEFAULT NULL, + `c206` char(2) DEFAULT NULL, + `c207` char(2) DEFAULT NULL, + `c208` char(2) DEFAULT NULL, + `c209` char(2) DEFAULT NULL, + `c210` char(2) DEFAULT NULL, + `c211` char(2) DEFAULT NULL, + `c212` char(2) DEFAULT NULL, + `c213` char(2) DEFAULT NULL, + `c214` char(2) DEFAULT NULL, + `c215` char(2) DEFAULT NULL, + `c216` char(2) DEFAULT NULL, + `c217` char(2) DEFAULT NULL, + `c218` char(2) DEFAULT NULL, + `c219` char(2) DEFAULT NULL, + `c220` char(2) DEFAULT NULL, + `c221` char(2) DEFAULT NULL, + `c222` char(2) DEFAULT NULL, + `c223` char(2) DEFAULT NULL, + `c224` char(2) DEFAULT NULL, + `c225` char(2) DEFAULT NULL, + `c226` char(2) DEFAULT NULL, + `c227` char(2) DEFAULT NULL, + `c228` char(2) DEFAULT NULL, + `c229` char(2) DEFAULT NULL, + `c230` char(2) DEFAULT NULL, + `c231` char(2) DEFAULT NULL, + `c232` char(2) DEFAULT NULL, + `c233` char(2) DEFAULT NULL, + `c234` char(2) DEFAULT NULL, + `c235` char(2) DEFAULT NULL, + `c236` char(2) DEFAULT NULL, + `c237` char(2) DEFAULT NULL, + `c238` char(2) DEFAULT NULL, + `c239` char(2) DEFAULT NULL, + `c240` char(2) DEFAULT NULL, + `c241` char(2) DEFAULT NULL, + `c242` char(2) DEFAULT NULL, + `c243` char(2) DEFAULT NULL, + `c244` char(2) DEFAULT NULL, + `c245` char(2) DEFAULT NULL, + `c246` char(2) DEFAULT NULL, + `c247` char(2) DEFAULT NULL, + `c248` char(2) DEFAULT NULL, + `c249` char(2) DEFAULT NULL, + `c250` char(2) DEFAULT NULL, + `c251` char(2) DEFAULT NULL, + `c252` char(2) DEFAULT NULL, + `c253` char(2) DEFAULT NULL, + `c254` char(2) DEFAULT NULL, + `c255` char(2) DEFAULT NULL, + `c256` char(2) DEFAULT NULL, + `c257` char(2) DEFAULT NULL, + `c258` char(2) DEFAULT NULL, + `c259` char(2) DEFAULT NULL, + `c260` char(2) DEFAULT NULL, + `c261` char(2) DEFAULT NULL, + `c262` char(2) DEFAULT NULL, + `c263` char(2) DEFAULT NULL, + `c264` char(2) DEFAULT NULL, + `c265` char(2) DEFAULT NULL, + `c266` char(2) DEFAULT NULL, + `c267` char(2) DEFAULT NULL, + `c268` char(2) DEFAULT NULL, + `c269` char(2) DEFAULT NULL, + `c270` char(2) DEFAULT NULL, + `c271` char(2) DEFAULT NULL, + `c272` char(2) DEFAULT NULL, + `c273` char(2) DEFAULT NULL, + `c274` char(2) DEFAULT NULL, + `c275` char(2) DEFAULT NULL, + `c276` char(2) DEFAULT NULL, + `c277` char(2) DEFAULT NULL, + `c278` char(2) DEFAULT NULL, + `c279` char(2) DEFAULT NULL, + `c280` char(2) DEFAULT NULL, + `c281` char(2) DEFAULT NULL, + `c282` char(2) DEFAULT NULL, + `c283` char(2) DEFAULT NULL, + `c284` char(2) DEFAULT NULL, + `c285` char(2) DEFAULT NULL, + `c286` char(2) DEFAULT NULL, + `c287` char(2) DEFAULT NULL, + `c288` char(2) DEFAULT NULL, + `c289` char(2) DEFAULT NULL, + `c290` char(2) DEFAULT NULL, + `c291` char(2) DEFAULT NULL, + `c292` char(2) DEFAULT NULL, + `c293` char(2) DEFAULT NULL, + `c294` char(2) DEFAULT NULL, + `c295` char(2) DEFAULT NULL, + `c296` char(2) DEFAULT NULL, + `c297` char(2) DEFAULT NULL, + `c298` char(2) DEFAULT NULL, + `c299` char(2) DEFAULT NULL, + `c300` char(2) DEFAULT NULL, + `c301` char(2) DEFAULT NULL, + `c302` char(2) DEFAULT NULL, + `c303` char(2) DEFAULT NULL, + `c304` char(2) DEFAULT NULL, + `c305` char(2) DEFAULT NULL, + `c306` char(2) DEFAULT NULL, + `c307` char(2) DEFAULT NULL, + `c308` char(2) DEFAULT NULL, + `c309` char(2) DEFAULT NULL, + `c310` char(2) DEFAULT NULL, + `c311` char(2) DEFAULT NULL, + `c312` char(2) DEFAULT NULL, + `c313` char(2) DEFAULT NULL, + `c314` char(2) DEFAULT NULL, + `c315` char(2) DEFAULT NULL, + `c316` char(2) DEFAULT NULL, + `c317` char(2) DEFAULT NULL, + `c318` char(2) DEFAULT NULL, + `c319` char(2) DEFAULT NULL, + `c320` char(2) DEFAULT NULL, + `c321` char(2) DEFAULT NULL, + `c322` char(2) DEFAULT NULL, + `c323` char(2) DEFAULT NULL, + `c324` char(2) DEFAULT NULL, + `c325` char(2) DEFAULT NULL, + `c326` char(2) DEFAULT NULL, + `c327` char(2) DEFAULT NULL, + `c328` char(2) DEFAULT NULL, + `c329` char(2) DEFAULT NULL, + `c330` char(2) DEFAULT NULL, + `c331` char(2) DEFAULT NULL, + `c332` char(2) DEFAULT NULL, + `c333` char(2) DEFAULT NULL, + `c334` char(2) DEFAULT NULL, + `c335` char(2) DEFAULT NULL, + `c336` char(2) DEFAULT NULL, + `c337` char(2) DEFAULT NULL, + `c338` char(2) DEFAULT NULL, + `c339` char(2) DEFAULT NULL, + `c340` char(2) DEFAULT NULL, + `c341` char(2) DEFAULT NULL, + `c342` char(2) DEFAULT NULL, + `c343` char(2) DEFAULT NULL, + `c344` char(2) DEFAULT NULL, + `c345` char(2) DEFAULT NULL, + `c346` char(2) DEFAULT NULL, + `c347` char(2) DEFAULT NULL, + `c348` char(2) DEFAULT NULL, + `c349` char(2) DEFAULT NULL, + `c350` char(2) DEFAULT NULL, + `c351` char(2) DEFAULT NULL, + `c352` char(2) DEFAULT NULL, + `c353` char(2) DEFAULT NULL, + `c354` char(2) DEFAULT NULL, + `c355` char(2) DEFAULT NULL, + `c356` char(2) DEFAULT NULL, + `c357` char(2) DEFAULT NULL, + `c358` char(2) DEFAULT NULL, + `c359` char(2) DEFAULT NULL, + `c360` char(2) DEFAULT NULL, + `c361` char(2) DEFAULT NULL, + `c362` char(2) DEFAULT NULL, + `c363` char(2) DEFAULT NULL, + `c364` char(2) DEFAULT NULL, + `c365` char(2) DEFAULT NULL, + `c366` char(2) DEFAULT NULL, + `c367` char(2) DEFAULT NULL, + `c368` char(2) DEFAULT NULL, + `c369` char(2) DEFAULT NULL, + `c370` char(2) DEFAULT NULL, + `c371` char(2) DEFAULT NULL, + `c372` char(2) DEFAULT NULL, + `c373` char(2) DEFAULT NULL, + `c374` char(2) DEFAULT NULL, + `c375` char(2) DEFAULT NULL, + `c376` char(2) DEFAULT NULL, + `c377` char(2) DEFAULT NULL, + `c378` char(2) DEFAULT NULL, + `c379` char(2) DEFAULT NULL, + `c380` char(2) DEFAULT NULL, + `c381` char(2) DEFAULT NULL, + `c382` char(2) DEFAULT NULL, + `c383` char(2) DEFAULT NULL, + `c384` char(2) DEFAULT NULL, + `c385` char(2) DEFAULT NULL, + `c386` char(2) DEFAULT NULL, + `c387` char(2) DEFAULT NULL, + `c388` char(2) DEFAULT NULL, + `c389` char(2) DEFAULT NULL, + `c390` char(2) DEFAULT NULL, + `c391` char(2) DEFAULT NULL, + `c392` char(2) DEFAULT NULL, + `c393` char(2) DEFAULT NULL, + `c394` char(2) DEFAULT NULL, + `c395` char(2) DEFAULT NULL, + `c396` char(2) DEFAULT NULL, + `c397` char(2) DEFAULT NULL, + `c398` char(2) DEFAULT NULL, + `c399` char(2) DEFAULT NULL, + `c400` char(2) DEFAULT NULL, + `c401` char(2) DEFAULT NULL, + `c402` char(2) DEFAULT NULL, + `c403` char(2) DEFAULT NULL, + `c404` char(2) DEFAULT NULL, + `c405` char(2) DEFAULT NULL, + `c406` char(2) DEFAULT NULL, + `c407` char(2) DEFAULT NULL, + `c408` char(2) DEFAULT NULL, + `c409` char(2) DEFAULT NULL, + `c410` char(2) DEFAULT NULL, + `c411` char(2) DEFAULT NULL, + `c412` char(2) DEFAULT NULL, + `c413` char(2) DEFAULT NULL, + `c414` char(2) DEFAULT NULL, + `c415` char(2) DEFAULT NULL, + `c416` char(2) DEFAULT NULL, + `c417` char(2) DEFAULT NULL, + `c418` char(2) DEFAULT NULL, + `c419` char(2) DEFAULT NULL, + `c420` char(2) DEFAULT NULL, + `c421` char(2) DEFAULT NULL, + `c422` char(2) DEFAULT NULL, + `c423` char(2) DEFAULT NULL, + `c424` char(2) DEFAULT NULL, + `c425` char(2) DEFAULT NULL, + `c426` char(2) DEFAULT NULL, + `c427` char(2) DEFAULT NULL, + `c428` char(2) DEFAULT NULL, + `c429` char(2) DEFAULT NULL, + `c430` char(2) DEFAULT NULL, + `c431` char(2) DEFAULT NULL, + `c432` char(2) DEFAULT NULL, + `c433` char(2) DEFAULT NULL, + `c434` char(2) DEFAULT NULL, + `c435` char(2) DEFAULT NULL, + `c436` char(2) DEFAULT NULL, + `c437` char(2) DEFAULT NULL, + `c438` char(2) DEFAULT NULL, + `c439` char(2) DEFAULT NULL, + `c440` char(2) DEFAULT NULL, + `c441` char(2) DEFAULT NULL, + `c442` char(2) DEFAULT NULL, + `c443` char(2) DEFAULT NULL, + `c444` char(2) DEFAULT NULL, + `c445` char(2) DEFAULT NULL, + `c446` char(2) DEFAULT NULL, + `c447` char(2) DEFAULT NULL, + `c448` char(2) DEFAULT NULL, + `c449` char(2) DEFAULT NULL, + `c450` char(2) DEFAULT NULL, + `c451` char(2) DEFAULT NULL, + `c452` char(2) DEFAULT NULL, + `c453` char(2) DEFAULT NULL, + `c454` char(2) DEFAULT NULL, + `c455` char(2) DEFAULT NULL, + `c456` char(2) DEFAULT NULL, + `c457` char(2) DEFAULT NULL, + `c458` char(2) DEFAULT NULL, + `c459` char(2) DEFAULT NULL, + `c460` char(2) DEFAULT NULL, + `c461` char(2) DEFAULT NULL, + `c462` char(2) DEFAULT NULL, + `c463` char(2) DEFAULT NULL, + `c464` char(2) DEFAULT NULL, + `c465` char(2) DEFAULT NULL, + `c466` char(2) DEFAULT NULL, + `c467` char(2) DEFAULT NULL, + `c468` char(2) DEFAULT NULL, + `c469` char(2) DEFAULT NULL, + `c470` char(2) DEFAULT NULL, + `c471` char(2) DEFAULT NULL, + `c472` char(2) DEFAULT NULL, + `c473` char(2) DEFAULT NULL, + `c474` char(2) DEFAULT NULL, + `c475` char(2) DEFAULT NULL, + `c476` char(2) DEFAULT NULL, + `c477` char(2) DEFAULT NULL, + `c478` char(2) DEFAULT NULL, + `c479` char(2) DEFAULT NULL, + `c480` char(2) DEFAULT NULL, + `c481` char(2) DEFAULT NULL, + `c482` char(2) DEFAULT NULL, + `c483` char(2) DEFAULT NULL, + `c484` char(2) DEFAULT NULL, + `c485` char(2) DEFAULT NULL, + `c486` char(2) DEFAULT NULL, + `c487` char(2) DEFAULT NULL, + `c488` char(2) DEFAULT NULL, + `c489` char(2) DEFAULT NULL, + `c490` char(2) DEFAULT NULL, + `c491` char(2) DEFAULT NULL, + `c492` char(2) DEFAULT NULL, + `c493` char(2) DEFAULT NULL, + `c494` char(2) DEFAULT NULL, + `c495` char(2) DEFAULT NULL, + `c496` char(2) DEFAULT NULL, + `c497` char(2) DEFAULT NULL, + `c498` char(2) DEFAULT NULL, + `c499` char(2) DEFAULT NULL, + `c500` char(2) DEFAULT NULL, + `c501` char(2) DEFAULT NULL, + `c502` char(2) DEFAULT NULL, + `c503` char(2) DEFAULT NULL, + `c504` char(2) DEFAULT NULL, + `c505` char(2) DEFAULT NULL, + `c506` char(2) DEFAULT NULL, + `c507` char(2) DEFAULT NULL, + `c508` char(2) DEFAULT NULL, + `c509` char(2) DEFAULT NULL, + `c510` char(2) DEFAULT NULL, + `c511` char(2) DEFAULT NULL, + `c512` char(2) DEFAULT NULL, + `c513` char(2) DEFAULT NULL, + `c514` char(2) DEFAULT NULL, + `c515` char(2) DEFAULT NULL, + `c516` char(2) DEFAULT NULL, + `c517` char(2) DEFAULT NULL, + `c518` char(2) DEFAULT NULL, + `c519` char(2) DEFAULT NULL, + `c520` char(2) DEFAULT NULL, + `c521` char(2) DEFAULT NULL, + `c522` char(2) DEFAULT NULL, + `c523` char(2) DEFAULT NULL, + `c524` char(2) DEFAULT NULL, + `c525` char(2) DEFAULT NULL, + `c526` char(2) DEFAULT NULL, + `c527` char(2) DEFAULT NULL, + `c528` char(2) DEFAULT NULL, + `c529` char(2) DEFAULT NULL, + `c530` char(2) DEFAULT NULL, + `c531` char(2) DEFAULT NULL, + `c532` char(2) DEFAULT NULL, + `c533` char(2) DEFAULT NULL, + `c534` char(2) DEFAULT NULL, + `c535` char(2) DEFAULT NULL, + `c536` char(2) DEFAULT NULL, + `c537` char(2) DEFAULT NULL, + `c538` char(2) DEFAULT NULL, + `c539` char(2) DEFAULT NULL, + `c540` char(2) DEFAULT NULL, + `c541` char(2) DEFAULT NULL, + `c542` char(2) DEFAULT NULL, + `c543` char(2) DEFAULT NULL, + `c544` char(2) DEFAULT NULL, + `c545` char(2) DEFAULT NULL, + `c546` char(2) DEFAULT NULL, + `c547` char(2) DEFAULT NULL, + `c548` char(2) DEFAULT NULL, + `c549` char(2) DEFAULT NULL, + `c550` char(2) DEFAULT NULL, + `c551` char(2) DEFAULT NULL, + `c552` char(2) DEFAULT NULL, + `c553` char(2) DEFAULT NULL, + `c554` char(2) DEFAULT NULL, + `c555` char(2) DEFAULT NULL, + `c556` char(2) DEFAULT NULL, + `c557` char(2) DEFAULT NULL, + `c558` char(2) DEFAULT NULL, + `c559` char(2) DEFAULT NULL, + `c560` char(2) DEFAULT NULL, + `c561` char(2) DEFAULT NULL, + `c562` char(2) DEFAULT NULL, + `c563` char(2) DEFAULT NULL, + `c564` char(2) DEFAULT NULL, + `c565` char(2) DEFAULT NULL, + `c566` char(2) DEFAULT NULL, + `c567` char(2) DEFAULT NULL, + `c568` char(2) DEFAULT NULL, + `c569` char(2) DEFAULT NULL, + `c570` char(2) DEFAULT NULL, + `c571` char(2) DEFAULT NULL, + `c572` char(2) DEFAULT NULL, + `c573` char(2) DEFAULT NULL, + `c574` char(2) DEFAULT NULL, + `c575` char(2) DEFAULT NULL, + `c576` char(2) DEFAULT NULL, + `c577` char(2) DEFAULT NULL, + `c578` char(2) DEFAULT NULL, + `c579` char(2) DEFAULT NULL, + `c580` char(2) DEFAULT NULL, + `c581` char(2) DEFAULT NULL, + `c582` char(2) DEFAULT NULL, + `c583` char(2) DEFAULT NULL, + `c584` char(2) DEFAULT NULL, + `c585` char(2) DEFAULT NULL, + `c586` char(2) DEFAULT NULL, + `c587` char(2) DEFAULT NULL, + `c588` char(2) DEFAULT NULL, + `c589` char(2) DEFAULT NULL, + `c590` char(2) DEFAULT NULL, + `c591` char(2) DEFAULT NULL, + `c592` char(2) DEFAULT NULL, + `c593` char(2) DEFAULT NULL, + `c594` char(2) DEFAULT NULL, + `c595` char(2) DEFAULT NULL, + `c596` char(2) DEFAULT NULL, + `c597` char(2) DEFAULT NULL, + `c598` char(2) DEFAULT NULL, + `c599` char(2) DEFAULT NULL, + `c600` char(2) DEFAULT NULL, + `c601` char(2) DEFAULT NULL, + `c602` char(2) DEFAULT NULL, + `c603` char(2) DEFAULT NULL, + `c604` char(2) DEFAULT NULL, + `c605` char(2) DEFAULT NULL, + `c606` char(2) DEFAULT NULL, + `c607` char(2) DEFAULT NULL, + `c608` char(2) DEFAULT NULL, + `c609` char(2) DEFAULT NULL, + `c610` char(2) DEFAULT NULL, + `c611` char(2) DEFAULT NULL, + `c612` char(2) DEFAULT NULL, + `c613` char(2) DEFAULT NULL, + `c614` char(2) DEFAULT NULL, + `c615` char(2) DEFAULT NULL, + `c616` char(2) DEFAULT NULL, + `c617` char(2) DEFAULT NULL, + `c618` char(2) DEFAULT NULL, + `c619` char(2) DEFAULT NULL, + `c620` char(2) DEFAULT NULL, + `c621` char(2) DEFAULT NULL, + `c622` char(2) DEFAULT NULL, + `c623` char(2) DEFAULT NULL, + `c624` char(2) DEFAULT NULL, + `c625` char(2) DEFAULT NULL, + `c626` char(2) DEFAULT NULL, + `c627` char(2) DEFAULT NULL, + `c628` char(2) DEFAULT NULL, + `c629` char(2) DEFAULT NULL, + `c630` char(2) DEFAULT NULL, + `c631` char(2) DEFAULT NULL, + `c632` char(2) DEFAULT NULL, + `c633` char(2) DEFAULT NULL, + `c634` char(2) DEFAULT NULL, + `c635` char(2) DEFAULT NULL, + `c636` char(2) DEFAULT NULL, + `c637` char(2) DEFAULT NULL, + `c638` char(2) DEFAULT NULL, + `c639` char(2) DEFAULT NULL, + `c640` char(2) DEFAULT NULL, + `c641` char(2) DEFAULT NULL, + `c642` char(2) DEFAULT NULL, + `c643` char(2) DEFAULT NULL, + `c644` char(2) DEFAULT NULL, + `c645` char(2) DEFAULT NULL, + `c646` char(2) DEFAULT NULL, + `c647` char(2) DEFAULT NULL, + `c648` char(2) DEFAULT NULL, + `c649` char(2) DEFAULT NULL, + `c650` char(2) DEFAULT NULL, + `c651` char(2) DEFAULT NULL, + `c652` char(2) DEFAULT NULL, + `c653` char(2) DEFAULT NULL, + `c654` char(2) DEFAULT NULL, + `c655` char(2) DEFAULT NULL, + `c656` char(2) DEFAULT NULL, + `c657` char(2) DEFAULT NULL, + `c658` char(2) DEFAULT NULL, + `c659` char(2) DEFAULT NULL, + `c660` char(2) DEFAULT NULL, + `c661` char(2) DEFAULT NULL, + `c662` char(2) DEFAULT NULL, + `c663` char(2) DEFAULT NULL, + `c664` char(2) DEFAULT NULL, + `c665` char(2) DEFAULT NULL, + `c666` char(2) DEFAULT NULL, + `c667` char(2) DEFAULT NULL, + `c668` char(2) DEFAULT NULL, + `c669` char(2) DEFAULT NULL, + `c670` char(2) DEFAULT NULL, + `c671` char(2) DEFAULT NULL, + `c672` char(2) DEFAULT NULL, + `c673` char(2) DEFAULT NULL, + `c674` char(2) DEFAULT NULL, + `c675` char(2) DEFAULT NULL, + `c676` char(2) DEFAULT NULL, + `c677` char(2) DEFAULT NULL, + `c678` char(2) DEFAULT NULL, + `c679` char(2) DEFAULT NULL, + `c680` char(2) DEFAULT NULL, + `c681` char(2) DEFAULT NULL, + `c682` char(2) DEFAULT NULL, + `c683` char(2) DEFAULT NULL, + `c684` char(2) DEFAULT NULL, + `c685` char(2) DEFAULT NULL, + `c686` char(2) DEFAULT NULL, + `c687` char(2) DEFAULT NULL, + `c688` char(2) DEFAULT NULL, + `c689` char(2) DEFAULT NULL, + `c690` char(2) DEFAULT NULL, + `c691` char(2) DEFAULT NULL, + `c692` char(2) DEFAULT NULL, + `c693` char(2) DEFAULT NULL, + `c694` char(2) DEFAULT NULL, + `c695` char(2) DEFAULT NULL, + `c696` char(2) DEFAULT NULL, + `c697` char(2) DEFAULT NULL, + `c698` char(2) DEFAULT NULL, + `c699` char(2) DEFAULT NULL, + `c700` char(2) DEFAULT NULL, + `c701` char(2) DEFAULT NULL, + `c702` char(2) DEFAULT NULL, + `c703` char(2) DEFAULT NULL, + `c704` char(2) DEFAULT NULL, + `c705` char(2) DEFAULT NULL, + `c706` char(2) DEFAULT NULL, + `c707` char(2) DEFAULT NULL, + `c708` char(2) DEFAULT NULL, + `c709` char(2) DEFAULT NULL, + `c710` char(2) DEFAULT NULL, + `c711` char(2) DEFAULT NULL, + `c712` char(2) DEFAULT NULL, + `c713` char(2) DEFAULT NULL, + `c714` char(2) DEFAULT NULL, + `c715` char(2) DEFAULT NULL, + `c716` char(2) DEFAULT NULL, + `c717` char(2) DEFAULT NULL, + `c718` char(2) DEFAULT NULL, + `c719` char(2) DEFAULT NULL, + `c720` char(2) DEFAULT NULL, + `c721` char(2) DEFAULT NULL, + `c722` char(2) DEFAULT NULL, + `c723` char(2) DEFAULT NULL, + `c724` char(2) DEFAULT NULL, + `c725` char(2) DEFAULT NULL, + `c726` char(2) DEFAULT NULL, + `c727` char(2) DEFAULT NULL, + `c728` char(2) DEFAULT NULL, + `c729` char(2) DEFAULT NULL, + `c730` char(2) DEFAULT NULL, + `c731` char(2) DEFAULT NULL, + `c732` char(2) DEFAULT NULL, + `c733` char(2) DEFAULT NULL, + `c734` char(2) DEFAULT NULL, + `c735` char(2) DEFAULT NULL, + `c736` char(2) DEFAULT NULL, + `c737` char(2) DEFAULT NULL, + `c738` char(2) DEFAULT NULL, + `c739` char(2) DEFAULT NULL, + `c740` char(2) DEFAULT NULL, + `c741` char(2) DEFAULT NULL, + `c742` char(2) DEFAULT NULL, + `c743` char(2) DEFAULT NULL, + `c744` char(2) DEFAULT NULL, + `c745` char(2) DEFAULT NULL, + `c746` char(2) DEFAULT NULL, + `c747` char(2) DEFAULT NULL, + `c748` char(2) DEFAULT NULL, + `c749` char(2) DEFAULT NULL, + `c750` char(2) DEFAULT NULL, + `c751` char(2) DEFAULT NULL, + `c752` char(2) DEFAULT NULL, + `c753` char(2) DEFAULT NULL, + `c754` char(2) DEFAULT NULL, + `c755` char(2) DEFAULT NULL, + `c756` char(2) DEFAULT NULL, + `c757` char(2) DEFAULT NULL, + `c758` char(2) DEFAULT NULL, + `c759` char(2) DEFAULT NULL, + `c760` char(2) DEFAULT NULL, + `c761` char(2) DEFAULT NULL, + `c762` char(2) DEFAULT NULL, + `c763` char(2) DEFAULT NULL, + `c764` char(2) DEFAULT NULL, + `c765` char(2) DEFAULT NULL, + `c766` char(2) DEFAULT NULL, + `c767` char(2) DEFAULT NULL, + `c768` char(2) DEFAULT NULL, + `c769` char(2) DEFAULT NULL, + `c770` char(2) DEFAULT NULL, + `c771` char(2) DEFAULT NULL, + `c772` char(2) DEFAULT NULL, + `c773` char(2) DEFAULT NULL, + `c774` char(2) DEFAULT NULL, + `c775` char(2) DEFAULT NULL, + `c776` char(2) DEFAULT NULL, + `c777` char(2) DEFAULT NULL, + `c778` char(2) DEFAULT NULL, + `c779` char(2) DEFAULT NULL, + `c780` char(2) DEFAULT NULL, + `c781` char(2) DEFAULT NULL, + `c782` char(2) DEFAULT NULL, + `c783` char(2) DEFAULT NULL, + `c784` char(2) DEFAULT NULL, + `c785` char(2) DEFAULT NULL, + `c786` char(2) DEFAULT NULL, + `c787` char(2) DEFAULT NULL, + `c788` char(2) DEFAULT NULL, + `c789` char(2) DEFAULT NULL, + `c790` char(2) DEFAULT NULL, + `c791` char(2) DEFAULT NULL, + `c792` char(2) DEFAULT NULL, + `c793` char(2) DEFAULT NULL, + `c794` char(2) DEFAULT NULL, + `c795` char(2) DEFAULT NULL, + `c796` char(2) DEFAULT NULL, + `c797` char(2) DEFAULT NULL, + `c798` char(2) DEFAULT NULL, + `c799` char(2) DEFAULT NULL, + `c800` char(2) DEFAULT NULL, + `c801` char(2) DEFAULT NULL, + `c802` char(2) DEFAULT NULL, + `c803` char(2) DEFAULT NULL, + `c804` char(2) DEFAULT NULL, + `c805` char(2) DEFAULT NULL, + `c806` char(2) DEFAULT NULL, + `c807` char(2) DEFAULT NULL, + `c808` char(2) DEFAULT NULL, + `c809` char(2) DEFAULT NULL, + `c810` char(2) DEFAULT NULL, + `c811` char(2) DEFAULT NULL, + `c812` char(2) DEFAULT NULL, + `c813` char(2) DEFAULT NULL, + `c814` char(2) DEFAULT NULL, + `c815` char(2) DEFAULT NULL, + `c816` char(2) DEFAULT NULL, + `c817` char(2) DEFAULT NULL, + `c818` char(2) DEFAULT NULL, + `c819` char(2) DEFAULT NULL, + `c820` char(2) DEFAULT NULL, + `c821` char(2) DEFAULT NULL, + `c822` char(2) DEFAULT NULL, + `c823` char(2) DEFAULT NULL, + `c824` char(2) DEFAULT NULL, + `c825` char(2) DEFAULT NULL, + `c826` char(2) DEFAULT NULL, + `c827` char(2) DEFAULT NULL, + `c828` char(2) DEFAULT NULL, + `c829` char(2) DEFAULT NULL, + `c830` char(2) DEFAULT NULL, + `c831` char(2) DEFAULT NULL, + `c832` char(2) DEFAULT NULL, + `c833` char(2) DEFAULT NULL, + `c834` char(2) DEFAULT NULL, + `c835` char(2) DEFAULT NULL, + `c836` char(2) DEFAULT NULL, + `c837` char(2) DEFAULT NULL, + `c838` char(2) DEFAULT NULL, + `c839` char(2) DEFAULT NULL, + `c840` char(2) DEFAULT NULL, + `c841` char(2) DEFAULT NULL, + `c842` char(2) DEFAULT NULL, + `c843` char(2) DEFAULT NULL, + `c844` char(2) DEFAULT NULL, + `c845` char(2) DEFAULT NULL, + `c846` char(2) DEFAULT NULL, + `c847` char(2) DEFAULT NULL, + `c848` char(2) DEFAULT NULL, + `c849` char(2) DEFAULT NULL, + `c850` char(2) DEFAULT NULL, + `c851` char(2) DEFAULT NULL, + `c852` char(2) DEFAULT NULL, + `c853` char(2) DEFAULT NULL, + `c854` char(2) DEFAULT NULL, + `c855` char(2) DEFAULT NULL, + `c856` char(2) DEFAULT NULL, + `c857` char(2) DEFAULT NULL, + `c858` char(2) DEFAULT NULL, + `c859` char(2) DEFAULT NULL, + `c860` char(2) DEFAULT NULL, + `c861` char(2) DEFAULT NULL, + `c862` char(2) DEFAULT NULL, + `c863` char(2) DEFAULT NULL, + `c864` char(2) DEFAULT NULL, + `c865` char(2) DEFAULT NULL, + `c866` char(2) DEFAULT NULL, + `c867` char(2) DEFAULT NULL, + `c868` char(2) DEFAULT NULL, + `c869` char(2) DEFAULT NULL, + `c870` char(2) DEFAULT NULL, + `c871` char(2) DEFAULT NULL, + `c872` char(2) DEFAULT NULL, + `c873` char(2) DEFAULT NULL, + `c874` char(2) DEFAULT NULL, + `c875` char(2) DEFAULT NULL, + `c876` char(2) DEFAULT NULL, + `c877` char(2) DEFAULT NULL, + `c878` char(2) DEFAULT NULL, + `c879` char(2) DEFAULT NULL, + `c880` char(2) DEFAULT NULL, + `c881` char(2) DEFAULT NULL, + `c882` char(2) DEFAULT NULL, + `c883` char(2) DEFAULT NULL, + `c884` char(2) DEFAULT NULL, + `c885` char(2) DEFAULT NULL, + `c886` char(2) DEFAULT NULL, + `c887` char(2) DEFAULT NULL, + `c888` char(2) DEFAULT NULL, + `c889` char(2) DEFAULT NULL, + `c890` char(2) DEFAULT NULL, + `c891` char(2) DEFAULT NULL, + `c892` char(2) DEFAULT NULL, + `c893` char(2) DEFAULT NULL, + `c894` char(2) DEFAULT NULL, + `c895` char(2) DEFAULT NULL, + `c896` char(2) DEFAULT NULL, + `c897` char(2) DEFAULT NULL, + `c898` char(2) DEFAULT NULL, + `c899` char(2) DEFAULT NULL, + `c900` char(2) DEFAULT NULL, + `c901` char(2) DEFAULT NULL, + `c902` char(2) DEFAULT NULL, + `c903` char(2) DEFAULT NULL, + `c904` char(2) DEFAULT NULL, + `c905` char(2) DEFAULT NULL, + `c906` char(2) DEFAULT NULL, + `c907` char(2) DEFAULT NULL, + `c908` char(2) DEFAULT NULL, + `c909` char(2) DEFAULT NULL, + `c910` char(2) DEFAULT NULL, + `c911` char(2) DEFAULT NULL, + `c912` char(2) DEFAULT NULL, + `c913` char(2) DEFAULT NULL, + `c914` char(2) DEFAULT NULL, + `c915` char(2) DEFAULT NULL, + `c916` char(2) DEFAULT NULL, + `c917` char(2) DEFAULT NULL, + `c918` char(2) DEFAULT NULL, + `c919` char(2) DEFAULT NULL, + `c920` char(2) DEFAULT NULL, + `c921` char(2) DEFAULT NULL, + `c922` char(2) DEFAULT NULL, + `c923` char(2) DEFAULT NULL, + `c924` char(2) DEFAULT NULL, + `c925` char(2) DEFAULT NULL, + `c926` char(2) DEFAULT NULL, + `c927` char(2) DEFAULT NULL, + `c928` char(2) DEFAULT NULL, + `c929` char(2) DEFAULT NULL, + `c930` char(2) DEFAULT NULL, + `c931` char(2) DEFAULT NULL, + `c932` char(2) DEFAULT NULL, + `c933` char(2) DEFAULT NULL, + `c934` char(2) DEFAULT NULL, + `c935` char(2) DEFAULT NULL, + `c936` char(2) DEFAULT NULL, + `c937` char(2) DEFAULT NULL, + `c938` char(2) DEFAULT NULL, + `c939` char(2) DEFAULT NULL, + `c940` char(2) DEFAULT NULL, + `c941` char(2) DEFAULT NULL, + `c942` char(2) DEFAULT NULL, + `c943` char(2) DEFAULT NULL, + `c944` char(2) DEFAULT NULL, + `c945` char(2) DEFAULT NULL, + `c946` char(2) DEFAULT NULL, + `c947` char(2) DEFAULT NULL, + `c948` char(2) DEFAULT NULL, + `c949` char(2) DEFAULT NULL, + `c950` char(2) DEFAULT NULL, + `c951` char(2) DEFAULT NULL, + `c952` char(2) DEFAULT NULL, + `c953` char(2) DEFAULT NULL, + `c954` char(2) DEFAULT NULL, + `c955` char(2) DEFAULT NULL, + `c956` char(2) DEFAULT NULL, + `c957` char(2) DEFAULT NULL, + `c958` char(2) DEFAULT NULL, + `c959` char(2) DEFAULT NULL, + `c960` char(2) DEFAULT NULL, + `c961` char(2) DEFAULT NULL, + `c962` char(2) DEFAULT NULL, + `c963` char(2) DEFAULT NULL, + `c964` char(2) DEFAULT NULL, + `c965` char(2) DEFAULT NULL, + `c966` char(2) DEFAULT NULL, + `c967` char(2) DEFAULT NULL, + `c968` char(2) DEFAULT NULL, + `c969` char(2) DEFAULT NULL, + `c970` char(2) DEFAULT NULL, + `c971` char(2) DEFAULT NULL, + `c972` char(2) DEFAULT NULL, + `c973` char(2) DEFAULT NULL, + `c974` char(2) DEFAULT NULL, + `c975` char(2) DEFAULT NULL, + `c976` char(2) DEFAULT NULL, + `c977` char(2) DEFAULT NULL, + `c978` char(2) DEFAULT NULL, + `c979` char(2) DEFAULT NULL, + `c980` char(2) DEFAULT NULL, + `c981` char(2) DEFAULT NULL, + `c982` char(2) DEFAULT NULL, + `c983` char(2) DEFAULT NULL, + `c984` char(2) DEFAULT NULL, + `c985` char(2) DEFAULT NULL, + `c986` char(2) DEFAULT NULL, + `c987` char(2) DEFAULT NULL, + `c988` char(2) DEFAULT NULL, + `c989` char(2) DEFAULT NULL, + `c990` char(2) DEFAULT NULL, + `c991` char(2) DEFAULT NULL, + `c992` char(2) DEFAULT NULL, + `c993` char(2) DEFAULT NULL, + `c994` char(2) DEFAULT NULL, + `c995` char(2) DEFAULT NULL, + `c996` char(2) DEFAULT NULL, + `c997` char(2) DEFAULT NULL, + `c998` char(2) DEFAULT NULL, + `c999` char(2) DEFAULT NULL, + `c1000` char(2) DEFAULT NULL, + `c1001` char(2) DEFAULT NULL, + `c1002` char(2) DEFAULT NULL, + `c1003` char(2) DEFAULT NULL, + `c1004` char(2) DEFAULT NULL, + `c1005` char(2) DEFAULT NULL, + `c1006` char(2) DEFAULT NULL, + `c1007` char(2) DEFAULT NULL, + `c1008` char(2) DEFAULT NULL, + `c1009` char(2) DEFAULT NULL, + `c1010` char(2) DEFAULT NULL, + `c1011` char(2) DEFAULT NULL, + `c1012` char(2) DEFAULT NULL, + `c1013` char(2) DEFAULT NULL, + `c1014` char(2) DEFAULT NULL, + `c1015` char(2) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 +drop table t1; +create table t1( +id int not null, +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(40), +c27 char(2), +c28 char(2), +c29 char(2), +c30 char(2), +c31 char(2), +c32 char(2), +c33 char(2), +c34 char(2), +c35 char(2), +c36 char(2), +c37 char(2), +c38 char(2), +c39 char(2), +c40 char(2), +c41 char(2), +c42 char(2), +c43 char(2), +c44 char(2), +c45 char(2), +c46 char(2), +c47 char(2), +c48 char(2), +c49 char(2), +c50 char(2), +c51 char(2), +c52 char(2), +c53 char(2), +c54 char(2), +c55 char(2), +c56 char(2), +c57 char(2), +c58 char(2), +c59 char(2), +c60 char(2), +c61 char(2), +c62 char(2), +c63 char(2), +c64 char(2), +c65 char(2), +c66 char(2), +c67 char(2), +c68 char(2), +c69 char(2), +c70 char(2), +c71 char(2), +c72 char(2), +c73 char(2), +c74 char(2), +c75 char(2), +c76 char(2), +c77 char(2), +c78 char(2), +c79 char(2), +c80 char(2), +c81 char(2), +c82 char(2), +c83 char(2), +c84 char(2), +c85 char(2), +c86 char(2), +c87 char(2), +c88 char(2), +c89 char(2), +c90 char(2), +c91 char(2), +c92 char(2), +c93 char(2), +c94 char(2), +c95 char(2), +c96 char(2), +c97 char(2), +c98 char(2), +c99 char(2), +c100 char(2), +c101 char(2), +c102 char(2), +c103 char(2), +c104 char(2), +c105 char(2), +c106 char(2), +c107 char(2), +c108 char(2), +c109 char(2), +c110 char(2), +c111 char(2), +c112 char(2), +c113 char(2), +c114 char(2), +c115 char(2), +c116 char(2), +c117 char(2), +c118 char(2), +c119 char(2), +c120 char(2), +c121 char(2), +c122 char(2), +c123 char(2), +c124 char(2), +c125 char(2), +c126 char(2), +c127 char(2), +c128 char(2), +c129 char(2), +c130 char(2), +c131 char(2), +c132 char(2), +c133 char(2), +c134 char(2), +c135 char(2), +c136 char(2), +c137 char(2), +c138 char(2), +c139 char(2), +c140 char(2), +c141 char(2), +c142 char(2), +c143 char(2), +c144 char(2), +c145 char(2), +c146 char(2), +c147 char(2), +c148 char(2), +c149 char(2), +c150 char(2), +c151 char(2), +c152 char(2), +c153 char(2), +c154 char(2), +c155 char(2), +c156 char(2), +c157 char(2), +c158 char(2), +c159 char(2), +c160 char(2), +c161 char(2), +c162 char(2), +c163 char(2), +c164 char(2), +c165 char(2), +c166 char(2), +c167 char(2), +c168 char(2), +c169 char(2), +c170 char(2), +c171 char(2), +c172 char(2), +c173 char(2), +c174 char(2), +c175 char(2), +c176 char(2), +c177 char(2), +c178 char(2), +c179 char(2), +c180 char(2), +c181 char(2), +c182 char(2), +c183 char(2), +c184 char(2), +c185 char(2), +c186 char(2), +c187 char(2), +c188 char(2), +c189 char(2), +c190 char(2), +c191 char(2), +c192 char(2), +c193 char(2), +c194 char(2), +c195 char(2), +c196 char(2), +c197 char(2), +c198 char(2), +c199 char(2), +c200 char(2), +c201 char(2), +c202 char(2), +c203 char(2), +c204 char(2), +c205 char(2), +c206 char(2), +c207 char(2), +c208 char(2), +c209 char(2), +c210 char(2), +c211 char(2), +c212 char(2), +c213 char(2), +c214 char(2), +c215 char(2), +c216 char(2), +c217 char(2), +c218 char(2), +c219 char(2), +c220 char(2), +c221 char(2), +c222 char(2), +c223 char(2), +c224 char(2), +c225 char(2), +c226 char(2), +c227 char(2), +c228 char(2), +c229 char(2), +c230 char(2), +c231 char(2), +c232 char(2), +c233 char(2), +c234 char(2), +c235 char(2), +c236 char(2), +c237 char(2), +c238 char(2), +c239 char(2), +c240 char(2), +c241 char(2), +c242 char(2), +c243 char(2), +c244 char(2), +c245 char(2), +c246 char(2), +c247 char(2), +c248 char(2), +c249 char(2), +c250 char(2), +c251 char(2), +c252 char(2), +c253 char(2), +c254 char(2), +c255 char(2), +c256 char(2), +c257 char(2), +c258 char(2), +c259 char(2), +c260 char(2), +c261 char(2), +c262 char(2), +c263 char(2), +c264 char(2), +c265 char(2), +c266 char(2), +c267 char(2), +c268 char(2), +c269 char(2), +c270 char(2), +c271 char(2), +c272 char(2), +c273 char(2), +c274 char(2), +c275 char(2), +c276 char(2), +c277 char(2), +c278 char(2), +c279 char(2), +c280 char(2), +c281 char(2), +c282 char(2), +c283 char(2), +c284 char(2), +c285 char(2), +c286 char(2), +c287 char(2), +c288 char(2), +c289 char(2), +c290 char(2), +c291 char(2), +c292 char(2), +c293 char(2), +c294 char(2), +c295 char(2), +c296 char(2), +c297 char(2), +c298 char(2), +c299 char(2), +c300 char(2), +c301 char(2), +c302 char(2), +c303 char(2), +c304 char(2), +c305 char(2), +c306 char(2), +c307 char(2), +c308 char(2), +c309 char(2), +c310 char(2), +c311 char(2), +c312 char(2), +c313 char(2), +c314 char(2), +c315 char(2), +c316 char(2), +c317 char(2), +c318 char(2), +c319 char(2), +c320 char(2), +c321 char(2), +c322 char(2), +c323 char(2), +c324 char(2), +c325 char(2), +c326 char(2), +c327 char(2), +c328 char(2), +c329 char(2), +c330 char(2), +c331 char(2), +c332 char(2), +c333 char(2), +c334 char(2), +c335 char(2), +c336 char(2), +c337 char(2), +c338 char(2), +c339 char(2), +c340 char(2), +c341 char(2), +c342 char(2), +c343 char(2), +c344 char(2), +c345 char(2), +c346 char(2), +c347 char(2), +c348 char(2), +c349 char(2), +c350 char(2), +c351 char(2), +c352 char(2), +c353 char(2), +c354 char(2), +c355 char(2), +c356 char(2), +c357 char(2), +c358 char(2), +c359 char(2), +c360 char(2), +c361 char(2), +c362 char(2), +c363 char(2), +c364 char(2), +c365 char(2), +c366 char(2), +c367 char(2), +c368 char(2), +c369 char(2), +c370 char(2), +c371 char(2), +c372 char(2), +c373 char(2), +c374 char(2), +c375 char(2), +c376 char(2), +c377 char(2), +c378 char(2), +c379 char(2), +c380 char(2), +c381 char(2), +c382 char(2), +c383 char(2), +c384 char(2), +c385 char(2), +c386 char(2), +c387 char(2), +c388 char(2), +c389 char(2), +c390 char(2), +c391 char(2), +c392 char(2), +c393 char(2), +c394 char(2), +c395 char(2), +c396 char(2), +c397 char(2), +c398 char(2), +c399 char(2), +c400 char(2), +c401 char(2), +c402 char(2), +c403 char(2), +c404 char(2), +c405 char(2), +c406 char(2), +c407 char(2), +c408 char(2), +c409 char(2), +c410 char(2), +c411 char(2), +c412 char(2), +c413 char(2), +c414 char(2), +c415 char(2), +c416 char(2), +c417 char(2), +c418 char(2), +c419 char(2), +c420 char(2), +c421 char(2), +c422 char(2), +c423 char(2), +c424 char(2), +c425 char(2), +c426 char(2), +c427 char(2), +c428 char(2), +c429 char(2), +c430 char(2), +c431 char(2), +c432 char(2), +c433 char(2), +c434 char(2), +c435 char(2), +c436 char(2), +c437 char(2), +c438 char(2), +c439 char(2), +c440 char(2), +c441 char(2), +c442 char(2), +c443 char(2), +c444 char(2), +c445 char(2), +c446 char(2), +c447 char(2), +c448 char(2), +c449 char(2), +c450 char(2), +c451 char(2), +c452 char(2), +c453 char(2), +c454 char(2), +c455 char(2), +c456 char(2), +c457 char(2), +c458 char(2), +c459 char(2), +c460 char(2), +c461 char(2), +c462 char(2), +c463 char(2), +c464 char(2), +c465 char(2), +c466 char(2), +c467 char(2), +c468 char(2), +c469 char(2), +c470 char(2), +c471 char(2), +c472 char(2), +c473 char(2), +c474 char(2), +c475 char(2), +c476 char(2), +c477 char(2), +c478 char(2), +c479 char(2), +c480 char(2), +c481 char(2), +c482 char(2), +c483 char(2), +c484 char(2), +c485 char(2), +c486 char(2), +c487 char(2), +c488 char(2), +c489 char(2), +c490 char(2), +c491 char(2), +c492 char(2), +c493 char(2), +c494 char(2), +c495 char(2), +c496 char(2), +c497 char(2), +c498 char(2), +c499 char(2), +c500 char(2), +c501 char(2), +c502 char(2), +c503 char(2), +c504 char(2), +c505 char(2), +c506 char(2), +c507 char(2), +c508 char(2), +c509 char(2), +c510 char(2), +c511 char(2), +c512 char(2), +c513 char(2), +c514 char(2), +c515 char(2), +c516 char(2), +c517 char(2), +c518 char(2), +c519 char(2), +c520 char(2), +c521 char(2), +c522 char(2), +c523 char(2), +c524 char(2), +c525 char(2), +c526 char(2), +c527 char(2), +c528 char(2), +c529 char(2), +c530 char(2), +c531 char(2), +c532 char(2), +c533 char(2), +c534 char(2), +c535 char(2), +c536 char(2), +c537 char(2), +c538 char(2), +c539 char(2), +c540 char(2), +c541 char(2), +c542 char(2), +c543 char(2), +c544 char(2), +c545 char(2), +c546 char(2), +c547 char(2), +c548 char(2), +c549 char(2), +c550 char(2), +c551 char(2), +c552 char(2), +c553 char(2), +c554 char(2), +c555 char(2), +c556 char(2), +c557 char(2), +c558 char(2), +c559 char(2), +c560 char(2), +c561 char(2), +c562 char(2), +c563 char(2), +c564 char(2), +c565 char(2), +c566 char(2), +c567 char(2), +c568 char(2), +c569 char(2), +c570 char(2), +c571 char(2), +c572 char(2), +c573 char(2), +c574 char(2), +c575 char(2), +c576 char(2), +c577 char(2), +c578 char(2), +c579 char(2), +c580 char(2), +c581 char(2), +c582 char(2), +c583 char(2), +c584 char(2), +c585 char(2), +c586 char(2), +c587 char(2), +c588 char(2), +c589 char(2), +c590 char(2), +c591 char(2), +c592 char(2), +c593 char(2), +c594 char(2), +c595 char(2), +c596 char(2), +c597 char(2), +c598 char(2), +c599 char(2), +c600 char(2), +c601 char(2), +c602 char(2), +c603 char(2), +c604 char(2), +c605 char(2), +c606 char(2), +c607 char(2), +c608 char(2), +c609 char(2), +c610 char(2), +c611 char(2), +c612 char(2), +c613 char(2), +c614 char(2), +c615 char(2), +c616 char(2), +c617 char(2), +c618 char(2), +c619 char(2), +c620 char(2), +c621 char(2), +c622 char(2), +c623 char(2), +c624 char(2), +c625 char(2), +c626 char(2), +c627 char(2), +c628 char(2), +c629 char(2), +c630 char(2), +c631 char(2), +c632 char(2), +c633 char(2), +c634 char(2), +c635 char(2), +c636 char(2), +c637 char(2), +c638 char(2), +c639 char(2), +c640 char(2), +c641 char(2), +c642 char(2), +c643 char(2), +c644 char(2), +c645 char(2), +c646 char(2), +c647 char(2), +c648 char(2), +c649 char(2), +c650 char(2), +c651 char(2), +c652 char(2), +c653 char(2), +c654 char(2), +c655 char(2), +c656 char(2), +c657 char(2), +c658 char(2), +c659 char(2), +c660 char(2), +c661 char(2), +c662 char(2), +c663 char(2), +c664 char(2), +c665 char(2), +c666 char(2), +c667 char(2), +c668 char(2), +c669 char(2), +c670 char(2), +c671 char(2), +c672 char(2), +c673 char(2), +c674 char(2), +c675 char(2), +c676 char(2), +c677 char(2), +c678 char(2), +c679 char(2), +c680 char(2), +c681 char(2), +c682 char(2), +c683 char(2), +c684 char(2), +c685 char(2), +c686 char(2), +c687 char(2), +c688 char(2), +c689 char(2), +c690 char(2), +c691 char(2), +c692 char(2), +c693 char(2), +c694 char(2), +c695 char(2), +c696 char(2), +c697 char(2), +c698 char(2), +c699 char(2), +c700 char(2), +c701 char(2), +c702 char(2), +c703 char(2), +c704 char(2), +c705 char(2), +c706 char(2), +c707 char(2), +c708 char(2), +c709 char(2), +c710 char(2), +c711 char(2), +c712 char(2), +c713 char(2), +c714 char(2), +c715 char(2), +c716 char(2), +c717 char(2), +c718 char(2), +c719 char(2), +c720 char(2), +c721 char(2), +c722 char(2), +c723 char(2), +c724 char(2), +c725 char(2), +c726 char(2), +c727 char(2), +c728 char(2), +c729 char(2), +c730 char(2), +c731 char(2), +c732 char(2), +c733 char(2), +c734 char(2), +c735 char(2), +c736 char(2), +c737 char(2), +c738 char(2), +c739 char(2), +c740 char(2), +c741 char(2), +c742 char(2), +c743 char(2), +c744 char(2), +c745 char(2), +c746 char(2), +c747 char(2), +c748 char(2), +c749 char(2), +c750 char(2), +c751 char(2), +c752 char(2), +c753 char(2), +c754 char(2), +c755 char(2), +c756 char(2), +c757 char(2), +c758 char(2), +c759 char(2), +c760 char(2), +c761 char(2), +c762 char(2), +c763 char(2), +c764 char(2), +c765 char(2), +c766 char(2), +c767 char(2), +c768 char(2), +c769 char(2), +c770 char(2), +c771 char(2), +c772 char(2), +c773 char(2), +c774 char(2), +c775 char(2), +c776 char(2), +c777 char(2), +c778 char(2), +c779 char(2), +c780 char(2), +c781 char(2), +c782 char(2), +c783 char(2), +c784 char(2), +c785 char(2), +c786 char(2), +c787 char(2), +c788 char(2), +c789 char(2), +c790 char(2), +c791 char(2), +c792 char(2), +c793 char(2), +c794 char(2), +c795 char(2), +c796 char(2), +c797 char(2), +c798 char(2), +c799 char(2), +c800 char(2), +c801 char(2), +c802 char(2), +c803 char(2), +c804 char(2), +c805 char(2), +c806 char(2), +c807 char(2), +c808 char(2), +c809 char(2), +c810 char(2), +c811 char(2), +c812 char(2), +c813 char(2), +c814 char(2), +c815 char(2), +c816 char(2), +c817 char(2), +c818 char(2), +c819 char(2), +c820 char(2), +c821 char(2), +c822 char(2), +c823 char(2), +c824 char(2), +c825 char(2), +c826 char(2), +c827 char(2), +c828 char(2), +c829 char(2), +c830 char(2), +c831 char(2), +c832 char(2), +c833 char(2), +c834 char(2), +c835 char(2), +c836 char(2), +c837 char(2), +c838 char(2), +c839 char(2), +c840 char(2), +c841 char(2), +c842 char(2), +c843 char(2), +c844 char(2), +c845 char(2), +c846 char(2), +c847 char(2), +c848 char(2), +c849 char(2), +c850 char(2), +c851 char(2), +c852 char(2), +c853 char(2), +c854 char(2), +c855 char(2), +c856 char(2), +c857 char(2), +c858 char(2), +c859 char(2), +c860 char(2), +c861 char(2), +c862 char(2), +c863 char(2), +c864 char(2), +c865 char(2), +c866 char(2), +c867 char(2), +c868 char(2), +c869 char(2), +c870 char(2), +c871 char(2), +c872 char(2), +c873 char(2), +c874 char(2), +c875 char(2), +c876 char(2), +c877 char(2), +c878 char(2), +c879 char(2), +c880 char(2), +c881 char(2), +c882 char(2), +c883 char(2), +c884 char(2), +c885 char(2), +c886 char(2), +c887 char(2), +c888 char(2), +c889 char(2), +c890 char(2), +c891 char(2), +c892 char(2), +c893 char(2), +c894 char(2), +c895 char(2), +c896 char(2), +c897 char(2), +c898 char(2), +c899 char(2), +c900 char(2), +c901 char(2), +c902 char(2), +c903 char(2), +c904 char(2), +c905 char(2), +c906 char(2), +c907 char(2), +c908 char(2), +c909 char(2), +c910 char(2), +c911 char(2), +c912 char(2), +c913 char(2), +c914 char(2), +c915 char(2), +c916 char(2), +c917 char(2), +c918 char(2), +c919 char(2), +c920 char(2), +c921 char(2), +c922 char(2), +c923 char(2), +c924 char(2), +c925 char(2), +c926 char(2), +c927 char(2), +c928 char(2), +c929 char(2), +c930 char(2), +c931 char(2), +c932 char(2), +c933 char(2), +c934 char(2), +c935 char(2), +c936 char(2), +c937 char(2), +c938 char(2), +c939 char(2), +c940 char(2), +c941 char(2), +c942 char(2), +c943 char(2), +c944 char(2), +c945 char(2), +c946 char(2), +c947 char(2), +c948 char(2), +c949 char(2), +c950 char(2), +c951 char(2), +c952 char(2), +c953 char(2), +c954 char(2), +c955 char(2), +c956 char(2), +c957 char(2), +c958 char(2), +c959 char(2), +c960 char(2), +c961 char(2), +c962 char(2), +c963 char(2), +c964 char(2), +c965 char(2), +c966 char(2), +c967 char(2), +c968 char(2), +c969 char(2), +c970 char(2), +c971 char(2), +c972 char(2), +c973 char(2), +c974 char(2), +c975 char(2), +c976 char(2), +c977 char(2), +c978 char(2), +c979 char(2), +c980 char(2), +c981 char(2), +c982 char(2), +c983 char(2), +c984 char(2), +c985 char(2), +c986 char(2), +c987 char(2), +c988 char(2), +c989 char(2), +c990 char(2), +c991 char(2), +c992 char(2), +c993 char(2), +c994 char(2), +c995 char(2), +c996 char(2), +c997 char(2), +c998 char(2), +c999 char(2), +c1000 char(2), +c1001 char(2), +c1002 char(2), +c1003 char(2), +c1004 char(2), +c1005 char(2), +c1006 char(2), +c1007 char(2), +c1008 char(2), +c1009 char(2), +c1010 char(2), +c1011 char(2), +c1012 char(2) +) engine=innodb default character set=UTF8MB3 +PARTITION BY HASH(id) PARTITIONS 3; +Warnings: +Warning 1287 'utf8mb3' is deprecated and will be removed in a future release. Please use utf8mb4 instead +alter table t1 modify column c28 char(250), algorithm=instant; +ERROR HY000: Column can't be modified with ALGORITHM=INSTANT as either max possible row size already crosses max permissible row size or may cross it after modify. Try ALGORITHM=INPLACE/COPY. +drop table t1; diff --git a/mysql-test/suite/innodb/r/instant_modify_with_gcol.result b/mysql-test/suite/innodb/r/instant_modify_with_gcol.result new file mode 100644 index 00000000000..fd4ca353cbd --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_with_gcol.result @@ -0,0 +1,61 @@ +# +# modify generated cols +# +CREATE TABLE t1 (a INT, b INT GENERATED ALWAYS AS (a), c CHAR(10), d CHAR(20), e CHAR(10) GENERATED ALWAYS AS (c), g INT); +INSERT INTO t1 VALUES(10, DEFAULT, "aa", "bb", DEFAULT, 20); +INSERT INTO t1 VALUES(11, DEFAULT, "jj", "kk", DEFAULT, 21); +select * from t1; +a b c d e g +10 10 aa bb aa 20 +11 11 jj kk jj 21 +alter table t1 modify g bigint, algorithm=instant; +select * from t1; +a b c d e g +10 10 aa bb aa 20 +11 11 jj kk jj 21 +alter table t1 modify a bigint, algorithm=instant; +select * from t1; +a b c d e g +10 10 aa bb aa 20 +11 11 jj kk jj 21 +update t1 set g=2; +select * from t1; +a b c d e g +10 10 aa bb aa 2 +11 11 jj kk jj 2 +alter table t1 modify b bigint, algorithm=instant; +ERROR HY000: 'Changing the STORED status' is not supported for generated columns. +alter table t1 modify e varchar(20), algorithm=instant; +ERROR HY000: 'Changing the STORED status' is not supported for generated columns. +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(12, DEFAULT, "jj", "kk", DEFAULT, 21); +select * from t1; +a b c d e g +10 10 aa bb aa 2 +11 11 jj kk jj 2 +12 12 jj kk jj 21 +update t1 set g=22; +select * from t1; +a b c d e g +10 10 aa bb aa 22 +11 11 jj kk jj 22 +12 12 jj kk jj 22 +update t1 set a=2; +select * from t1; +a b c d e g +2 2 aa bb aa 22 +2 2 jj kk jj 22 +2 2 jj kk jj 22 +update t1 set c=2; +select * from t1; +a b c d e g +2 2 2 bb 2 22 +2 2 2 kk 2 22 +2 2 2 kk 2 22 +checksum table t1; +Table Checksum +test.t1 122533898 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +3 +drop table t1; diff --git a/mysql-test/suite/innodb/r/instant_modify_with_import.result b/mysql-test/suite/innodb/r/instant_modify_with_import.result new file mode 100644 index 00000000000..cffac020b26 --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_with_import.result @@ -0,0 +1,63 @@ +call mtr.add_suppression("Export is not supported for instantly modified table"); +create database import_test; +use import_test; +create table t1(id int,c1 int) engine=innodb; +insert into t1 values(1,1),(2,2); +create table t2 like t1; +# EXPORT +FLUSH TABLE t1 FOR EXPORT; +# Copy cfg/ibd files into temp location +UNLOCK TABLES; +DROP TABLE t1; +ALTER TABLE t2 RENAME to t1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int DEFAULT NULL, + `c1` int DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +# IMPORT +ALTER TABLE t1 DISCARD TABLESPACE; +# Copy cfg/ibd files from temp location +ALTER TABLE t1 IMPORT TABLESPACE; +SELECT * FROM t1; +id c1 +1 1 +2 2 +alter table t1 modify column c1 bigint,algorithm=instant; +# EXPORT instant modified table +FLUSH TABLE t1 FOR EXPORT; +ERROR HY000: Table storage engine for 'InnoDB' doesn't have this option +drop table t1; +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c1 int) DEFAULT CHARACTER SET utf8mb4 +PARTITION BY HASH(id) PARTITIONS 3; +alter table t1 modify column c1 bigint,algorithm=instant; +FLUSH TABLE t1 FOR EXPORT; +ERROR HY000: Table storage engine for 'InnoDB' doesn't have this option +drop table t1; +create table t1(id int)engine=innodb; +alter table t1 add column c1 bigint,algorithm=instant; +create table t2(id int, c1 int)engine=innodb; +alter table t2 modify column c1 bigint,algorithm=instant; +# EXPORT +FLUSH TABLE t1 FOR EXPORT; +# Copy cfg/ibd files into temp location +UNLOCK TABLES; +drop table t1; +ALTER TABLE t2 RENAME to t1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int DEFAULT NULL, + `c1` bigint DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +c1 2 1 6 1027 4 +# IMPORT +ALTER TABLE t1 DISCARD TABLESPACE; +# Copy cfg/ibd files from temp location +ALTER TABLE t1 IMPORT TABLESPACE; +ERROR HY000: Schema mismatch (Import is not supported for instantly modified table) +drop table t1; +drop database import_test; diff --git a/mysql-test/suite/innodb/r/instant_modify_with_index.result b/mysql-test/suite/innodb/r/instant_modify_with_index.result new file mode 100644 index 00000000000..d638e5e7de1 --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_with_index.result @@ -0,0 +1,285 @@ +# +# test add index on instant modified column - char +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10)); +INSERT INTO t1 VALUES(1, repeat('ax', 4), repeat('b', 8)); +INSERT INTO t1 VALUES(2, repeat('xa', 4), repeat('b', 8)); +INSERT INTO t1 VALUES(3, repeat('ac', 4), repeat('b', 8)); +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('ab', 8), repeat('b', 8)); +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 8)); +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +select * from t1; +id a b +1 axaxaxax bbbbbbbb +2 xaxaxaxa bbbbbbbb +3 acacacac bbbbbbbb +4 abababababababab bbbbbbbb +5 aaaaaaaaaaaaaaaa bbbbbbbb +alter table t1 add index idx(a); +INSERT INTO t1 VALUES(6, repeat('x', 16), repeat('x', 8)); +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +select * from t1; +id a b +1 axaxaxax bbbbbbbb +2 xaxaxaxa bbbbbbbb +3 acacacac bbbbbbbb +4 abababababababab bbbbbbbb +5 aaaaaaaaaaaaaaaa bbbbbbbb +6 xxxxxxxxxxxxxxxx xxxxxxxx +alter table t1 modify b char(20), algorithm=instant; +INSERT INTO t1 VALUES(7, repeat('y', 16), repeat('y', 16)); +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +2 +select * from t1; +id a b +1 axaxaxax bbbbbbbb +2 xaxaxaxa bbbbbbbb +3 acacacac bbbbbbbb +4 abababababababab bbbbbbbb +5 aaaaaaaaaaaaaaaa bbbbbbbb +6 xxxxxxxxxxxxxxxx xxxxxxxx +7 yyyyyyyyyyyyyyyy yyyyyyyyyyyyyyyy +select a from t1 force index(idx); +a +aaaaaaaaaaaaaaaa +abababababababab +acacacac +axaxaxax +xaxaxaxa +xxxxxxxxxxxxxxxx +yyyyyyyyyyyyyyyy +select a from t1 order by a; +a +aaaaaaaaaaaaaaaa +abababababababab +acacacac +axaxaxax +xaxaxaxa +xxxxxxxxxxxxxxxx +yyyyyyyyyyyyyyyy +checksum table t1; +Table Checksum +test.t1 2064074107 +drop table t1; +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# +# test add index on instant modified column - varchar +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a varchar(10), b varchar(10)); +INSERT INTO t1 VALUES(1, repeat('ax', 4), repeat('b', 8)); +INSERT INTO t1 VALUES(2, repeat('xa', 4), repeat('b', 8)); +INSERT INTO t1 VALUES(3, repeat('ac', 4), repeat('b', 8)); +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('ab', 8), repeat('b', 8)); +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 8)); +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +select * from t1; +id a b +1 axaxaxax bbbbbbbb +2 xaxaxaxa bbbbbbbb +3 acacacac bbbbbbbb +4 abababababababab bbbbbbbb +5 aaaaaaaaaaaaaaaa bbbbbbbb +alter table t1 add index idx(a); +INSERT INTO t1 VALUES(6, repeat('x', 16), repeat('x', 8)); +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +select * from t1; +id a b +1 axaxaxax bbbbbbbb +2 xaxaxaxa bbbbbbbb +3 acacacac bbbbbbbb +4 abababababababab bbbbbbbb +5 aaaaaaaaaaaaaaaa bbbbbbbb +6 xxxxxxxxxxxxxxxx xxxxxxxx +alter table t1 modify b char(20), algorithm=instant; +INSERT INTO t1 VALUES(7, repeat('y', 16), repeat('y', 16)); +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +2 +select * from t1; +id a b +1 axaxaxax bbbbbbbb +2 xaxaxaxa bbbbbbbb +3 acacacac bbbbbbbb +4 abababababababab bbbbbbbb +5 aaaaaaaaaaaaaaaa bbbbbbbb +6 xxxxxxxxxxxxxxxx xxxxxxxx +7 yyyyyyyyyyyyyyyy yyyyyyyyyyyyyyyy +select a from t1 force index(idx); +a +aaaaaaaaaaaaaaaa +abababababababab +acacacac +axaxaxax +xaxaxaxa +xxxxxxxxxxxxxxxx +yyyyyyyyyyyyyyyy +select a from t1 order by a; +a +aaaaaaaaaaaaaaaa +abababababababab +acacacac +axaxaxax +xaxaxaxa +xxxxxxxxxxxxxxxx +yyyyyyyyyyyyyyyy +checksum table t1; +Table Checksum +test.t1 2064074107 +drop table t1; +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +# +# test add index on instant modified column - int +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a int); +INSERT INTO t1(a) VALUES(5); +INSERT INTO t1(a) VALUES(1); +INSERT INTO t1(a) VALUES(1000); +INSERT INTO t1(a) VALUES(-1); +INSERT INTO t1(a) VALUES(0); +INSERT INTO t1(a) VALUES(-100); +alter table t1 modify a bigint, algorithm=instant; +SELECT * FROM t1; +id a +1 5 +2 1 +3 1000 +4 -1 +5 0 +6 -100 +INSERT INTO t1(a) VALUES(2); +INSERT INTO t1(a) VALUES(pow(2, 40)); +INSERT INTO t1(a) VALUES(pow(2, 60)); +alter table t1 add key idx(a); +INSERT INTO t1(a) VALUES(10); +select * from t1 where a=-1; +id a +4 -1 +select * from t1 where a=5; +id a +1 5 +select a from t1 force index(idx); +a +-100 +-1 +0 +1 +2 +5 +10 +1000 +1099511627776 +1152921504606846976 +checksum table t1; +Table Checksum +test.t1 1978878417 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +drop table t1; +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a mediumint); +INSERT INTO t1(a) VALUES(5); +INSERT INTO t1(a) VALUES(1); +INSERT INTO t1(a) VALUES(1000); +INSERT INTO t1(a) VALUES(-1); +INSERT INTO t1(a) VALUES(0); +INSERT INTO t1(a) VALUES(-100); +alter table t1 modify a bigint, algorithm=instant; +SELECT * FROM t1; +id a +1 5 +2 1 +3 1000 +4 -1 +5 0 +6 -100 +INSERT INTO t1(a) VALUES(2); +INSERT INTO t1(a) VALUES(pow(2, 40)); +INSERT INTO t1(a) VALUES(pow(2, 60)); +alter table t1 add key idx(a); +INSERT INTO t1(a) VALUES(10); +select * from t1 where a=-1; +id a +4 -1 +select * from t1 where a=5; +id a +1 5 +select a from t1 force index(idx); +a +-100 +-1 +0 +1 +2 +5 +10 +1000 +1099511627776 +1152921504606846976 +checksum table t1; +Table Checksum +test.t1 1978878417 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +drop table t1; +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a tinyint); +INSERT INTO t1(a) VALUES(5); +INSERT INTO t1(a) VALUES(1); +INSERT INTO t1(a) VALUES(10); +INSERT INTO t1(a) VALUES(-1); +INSERT INTO t1(a) VALUES(0); +INSERT INTO t1(a) VALUES(-10); +alter table t1 modify a int, algorithm=instant; +SELECT * FROM t1; +id a +1 5 +2 1 +3 10 +4 -1 +5 0 +6 -10 +INSERT INTO t1(a) VALUES(2); +INSERT INTO t1(a) VALUES(pow(2, 30)); +INSERT INTO t1(a) VALUES(pow(2, 20)); +alter table t1 add key idx(a); +INSERT INTO t1(a) VALUES(10); +select * from t1 where a=-1; +id a +4 -1 +select * from t1 where a=5; +id a +1 5 +select a from t1 force index(idx); +a +-10 +-1 +0 +1 +2 +5 +10 +10 +1048576 +1073741824 +checksum table t1; +Table Checksum +test.t1 2038431323 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +1 +drop table t1; diff --git a/mysql-test/suite/innodb/r/instant_modify_with_online_ddl.result b/mysql-test/suite/innodb/r/instant_modify_with_online_ddl.result new file mode 100644 index 00000000000..b99f9c63ffa --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_with_online_ddl.result @@ -0,0 +1,89 @@ +create table test1 (id int not null AUTO_INCREMENT, +c1_char char(10) CHARACTER SET latin1 default 'abc', +c2_varchar varchar(10) CHARACTER SET utf8 not null, +c3_binary binary(10), +c4_varbinary varbinary(10) not null default b'111', +c5_tint tinyint default 0, +c6_sint smallint, +c7_mint mediumint signed not null, +c8_int int unsigned unique, +c9_bint bigint, +PRIMARY KEY (id), +KEY test1_key (c9_bint)); +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('ddd', 10, 20, 30, 40); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 31, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 32, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 33, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 34, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 35, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 36, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 37, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 38, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 39, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 40, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 41, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 42, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 43, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 44, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 45, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 46, 80); +alter table test1 modify c7_mint int signed not null, modify c5_tint smallint default 1, modify c6_sint int default 100, modify c1_char varchar(20) CHARACTER SET latin1 default 'abc', algorithm=instant; +alter table test1 add column i int, add column j char(30) default 'abc',add column n int default 1, algorithm=instant; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +c1_char 2 1 2 524542 10 +c5_tint 6 1 6 1025 1 +c6_sint 7 1 6 1026 2 +c7_mint 8 1 6 1289 3 +SET DEBUG_SYNC = 'RESET'; +SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL do_update WAIT_FOR do_log'; +alter table test1 drop primary key, add primary key(id, c6_sint); +SET DEBUG_SYNC='now WAIT_FOR do_update'; +update test1 set c8_int=55 where id=1; +SET DEBUG_SYNC='now SIGNAL do_log'; +con1 disconnected +SET DEBUG_SYNC = 'RESET'; +show create table test1; +Table Create Table +test1 CREATE TABLE `test1` ( + `id` int NOT NULL AUTO_INCREMENT, + `c1_char` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT 'abc', + `c2_varchar` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `c3_binary` binary(10) DEFAULT NULL, + `c4_varbinary` varbinary(10) NOT NULL DEFAULT '', + `c5_tint` smallint DEFAULT '1', + `c6_sint` int NOT NULL DEFAULT '100', + `c7_mint` int NOT NULL, + `c8_int` int unsigned DEFAULT NULL, + `c9_bint` bigint DEFAULT NULL, + `i` int DEFAULT NULL, + `j` char(30) DEFAULT 'abc', + `n` int DEFAULT '1', + PRIMARY KEY (`id`,`c6_sint`), + UNIQUE KEY `c8_int` (`c8_int`), + KEY `test1_key` (`c9_bint`) +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +select * from test1; +id c1_char c2_varchar c3_binary c4_varbinary c5_tint c6_sint c7_mint c8_int c9_bint i j n +1 abc ddd NULL  0 10 20 55 40 NULL abc 1 +2 abc eee NULL  0 50 60 31 80 NULL abc 1 +3 abc eee NULL  0 50 60 32 80 NULL abc 1 +4 abc eee NULL  0 50 60 33 80 NULL abc 1 +5 abc eee NULL  0 50 60 34 80 NULL abc 1 +6 abc eee NULL  0 50 60 35 80 NULL abc 1 +7 abc eee NULL  0 50 60 36 80 NULL abc 1 +8 abc eee NULL  0 50 60 37 80 NULL abc 1 +9 abc eee NULL  0 50 60 38 80 NULL abc 1 +10 abc eee NULL  0 50 60 39 80 NULL abc 1 +11 abc eee NULL  0 50 60 40 80 NULL abc 1 +12 abc eee NULL  0 50 60 41 80 NULL abc 1 +13 abc eee NULL  0 50 60 42 80 NULL abc 1 +14 abc eee NULL  0 50 60 43 80 NULL abc 1 +15 abc eee NULL  0 50 60 44 80 NULL abc 1 +16 abc eee NULL  0 50 60 45 80 NULL abc 1 +17 abc eee NULL  0 50 60 46 80 NULL abc 1 +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +DROP TABLE test1; diff --git a/mysql-test/suite/innodb/r/instant_modify_with_recovery.result b/mysql-test/suite/innodb/r/instant_modify_with_recovery.result new file mode 100644 index 00000000000..6618afefdcb --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_with_recovery.result @@ -0,0 +1,209 @@ +# ------------------------------------------------------------ +# Create a table with 3 columns. [id, c1, c2] +# ------------------------------------------------------------ +CREATE TABLE rec_t1(id INT PRIMARY KEY, c1 CHAR(10), c2 CHAR(10)) ROW_FORMAT=dynamic; +CREATE TABLE rec_t2(id INT PRIMARY KEY, c1 CHAR(10), c2 CHAR(10)) ROW_FORMAT=compact; +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t1 6 0 0 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 13 16711934 0 +c2 2 13 16711934 0 +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t2 6 0 0 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 13 16711934 0 +c2 2 13 16711934 0 +INSERT INTO rec_t1 VALUES (1, "r1c1", "r1c2"); +insert into rec_t1 values (2, "r2c1", "r2c2"); +SELECT * FROM rec_t1; +id c1 c2 +1 r1c1 r1c2 +2 r2c1 r2c2 +INSERT INTO rec_t2 VALUES (1, "r1c1", "r1c2"); +insert into rec_t2 values (2, "r2c1", "r2c2"); +select * from rec_t1; +id c1 c2 +1 r1c1 r1c2 +2 r2c1 r2c2 +# INSTANT ADD a column +Alter table rec_t1 add column c3 char(10), algorithm=instant; +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t1 7 0 1 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 13 16711934 0 +c2 2 13 16711934 0 +c3 3 13 16711934 1 +INSERT INTO rec_t1 VALUES (3, "r3c1", "r3c2", "r3c3"); +SELECT * FROM rec_t1; +id c1 c2 c3 +1 r1c1 r1c2 NULL +2 r2c1 r2c2 NULL +3 r3c1 r3c2 r3c3 +alter table rec_t2 add column c3 char(10), algorithm=instant; +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t2 7 0 1 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 13 16711934 0 +c2 2 13 16711934 0 +c3 3 13 16711934 1 +INSERT INTO rec_t2 VALUES (3, "r3c1", "r3c2", "r3c3"); +SELECT * FROM rec_t2; +id c1 c2 c3 +1 r1c1 r1c2 NULL +2 r2c1 r2c2 NULL +3 r3c1 r3c2 r3c3 +# INSTANT DROP a column +Alter table rec_t1 drop column c2 , algorithm=instant; +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t1 6 0 2 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 13 16711934 0 +c3 2 13 16711934 1 +INSERT INTO rec_t1 VALUES (4, "r4c1", "r4c3"); +SELECT * FROM rec_t1; +id c1 c3 +1 r1c1 NULL +2 r2c1 NULL +3 r3c1 r3c3 +4 r4c1 r4c3 +Alter table rec_t2 drop column c2 , algorithm=instant; +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t2 6 0 2 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 13 16711934 0 +c3 2 13 16711934 1 +INSERT INTO rec_t2 VALUES (4, "r4c1", "r4c3"); +SELECT * FROM rec_t2; +id c1 c3 +1 r1c1 NULL +2 r2c1 NULL +3 r3c1 r3c3 +4 r4c1 r4c3 +# INSTANT MODIFY a column +alter table rec_t1 modify column c1 varchar(20), algorithm=instant; +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t1 6 0 3 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 12 16711695 0 +c3 2 13 16711934 1 +insert into rec_t1 values (5, "r5c1c1c1c1c1", "r5c3"); +select * from rec_t1; +id c1 c3 +1 r1c1 NULL +2 r2c1 NULL +3 r3c1 r3c3 +4 r4c1 r4c3 +5 r5c1c1c1c1c1 r5c3 +alter table rec_t2 modify column c1 varchar(20), algorithm=instant; +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t2 6 0 3 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 12 16711695 0 +c3 2 13 16711934 1 +insert into rec_t2 values (5, "r5c1c1c1c1c1", "r5c3"); +select * from rec_t2; +id c1 c3 +1 r1c1 NULL +2 r2c1 NULL +3 r3c1 r3c3 +4 r4c1 r4c3 +5 r5c1c1c1c1c1 r5c3 +# Make sure nothing gets flushed on disk +SET GLOBAL innodb_log_checkpoint_now = ON; +SET GLOBAL innodb_page_cleaner_disabled_debug = 1; +SET GLOBAL innodb_dict_stats_disabled_debug = 1; +SET GLOBAL innodb_master_thread_disabled_debug = 1; +# Make inplace update +UPDATE rec_t1 SET c1="r0c0"; +# Make not-inplace update +UPDATE rec_t1 SET c3="r1c3" WHERE id=1; +# Insert a new record +INSERT INTO rec_t1 VALUES (6, "r6c1c1c1c1c1", "r6c3"); +# Delete a record +DELETE FROM rec_t1 WHERE id=2; +select * from rec_t1; +id c1 c3 +1 r0c0 r1c3 +3 r0c0 r3c3 +4 r0c0 r4c3 +5 r0c0 r5c3 +6 r6c1c1c1c1c1 r6c3 +checksum table rec_t1; +Table Checksum +test.rec_t1 692983471 +select * from rec_t2; +id c1 c3 +1 r1c1 NULL +2 r2c1 NULL +3 r3c1 r3c3 +4 r4c1 r4c3 +5 r5c1c1c1c1c1 r5c3 +checksum table rec_t2; +Table Checksum +test.rec_t2 3169136861 +# Kill and restart +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t1 6 0 3 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 12 16711695 0 +c3 2 13 16711934 1 +SELECT * FROM rec_t1; +id c1 c3 +1 r0c0 r1c3 +3 r0c0 r3c3 +4 r0c0 r4c3 +5 r0c0 r5c3 +6 r6c1c1c1c1c1 r6c3 +checksum table rec_t1; +Table Checksum +test.rec_t1 692983471 +# Metadata from INFORMATION_SCHEMA.TABLES +NAME N_COLS INSTANT_COLS TOTAL_ROW_VERSIONS +test/rec_t2 6 0 3 +# Metadata from INFORMATION_SCHEMA.COLUMNS +NAME POS MTYPE PRTYPE HAS_DEFAULT +id 0 6 1283 0 +c1 1 12 16711695 0 +c3 2 13 16711934 1 +SELECT * FROM rec_t2; +id c1 c3 +1 r1c1 NULL +2 r2c1 NULL +3 r3c1 r3c3 +4 r4c1 r4c3 +5 r5c1c1c1c1c1 r5c3 +checksum table rec_t2; +Table Checksum +test.rec_t2 3169136861 +########### +# CLEANUP # +########### +DROP TABLE rec_t1; +drop table rec_t2; diff --git a/mysql-test/suite/innodb/r/instant_modify_with_rollback.result b/mysql-test/suite/innodb/r/instant_modify_with_rollback.result new file mode 100644 index 00000000000..92621fd082d --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_with_rollback.result @@ -0,0 +1,1598 @@ +test1 +CREATE TABLE `t1` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`k` int(11) NOT NULL DEFAULT '0', +`c` char(120) NOT NULL DEFAULT '', +`pad` char(60) NOT NULL DEFAULT '', +PRIMARY KEY (`id`), +KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=latin1; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into t1 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +alter table t1 modify column c varchar(240) not null default '',algorithm=instant; +checksum table t1; +Table Checksum +test.t1 2766999341 +begin; +delete from t1 where id=455119; +insert into t1 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +rollback; +select * from t1; +id k c pad +455119 19982 45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008 58059266282-12236046963-36829385701-89632835700-73658374282 +checksum table t1; +Table Checksum +test.t1 2766999341 +drop table t1; +test2 +create table t1(id int, c1 int, c2 int); +insert into t1 values(1, -2147483648, 2147483647); +insert into t1 values(2, 9981, -1); +select * from t1; +id c1 c2 +1 -2147483648 2147483647 +2 9981 -1 +alter table t1 modify column id bigint, modify column c1 bigint, modify column c2 bigint,algorithm=instant; +select * from t1; +id c1 c2 +1 -2147483648 2147483647 +2 9981 -1 +checksum table t1; +Table Checksum +test.t1 1273896120 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 +1 -2147483648 2147483647 +2 9981 -1 +checksum table t1; +Table Checksum +test.t1 1273896120 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 +1 -2147483648 2147483647 +2 9981 -1 +checksum table t1; +Table Checksum +test.t1 1273896120 +drop table t1; +test3 +create table t1(id int, c1 mediumint, c2 mediumint); +insert into t1 values(1, -8388608, 8388607); +insert into t1 values(2, 9981, -2); +select * from t1; +id c1 c2 +1 -8388608 8388607 +2 9981 -2 +alter table t1 modify column id bigint, modify column c1 bigint, modify column c2 bigint,algorithm=instant; +select * from t1; +id c1 c2 +1 -8388608 8388607 +2 9981 -2 +checksum table t1; +Table Checksum +test.t1 189069453 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 +1 -8388608 8388607 +2 9981 -2 +checksum table t1; +Table Checksum +test.t1 189069453 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 +1 -8388608 8388607 +2 9981 -2 +checksum table t1; +Table Checksum +test.t1 189069453 +drop table t1; +test4 +create table t1(id int, c1 smallint, c2 smallint); +insert into t1 values(1, -32768, 32767); +insert into t1 values(2, 9981, -9981); +select * from t1; +id c1 c2 +1 -32768 32767 +2 9981 -9981 +alter table t1 modify column id bigint, modify column c1 bigint, modify column c2 bigint,algorithm=instant; +select * from t1; +id c1 c2 +1 -32768 32767 +2 9981 -9981 +checksum table t1; +Table Checksum +test.t1 3546258974 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 +1 -32768 32767 +2 9981 -9981 +checksum table t1; +Table Checksum +test.t1 3546258974 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 +1 -32768 32767 +2 9981 -9981 +checksum table t1; +Table Checksum +test.t1 3546258974 +drop table t1; +test5 +create table t1(id int, c1 tinyint, c2 tinyint); +insert into t1 values(1, -128, 127); +insert into t1 values(2, 98, -105); +select * from t1; +id c1 c2 +1 -128 127 +2 98 -105 +alter table t1 modify column id bigint, modify column c1 bigint, modify column c2 bigint,algorithm=instant; +select * from t1; +id c1 c2 +1 -128 127 +2 98 -105 +checksum table t1; +Table Checksum +test.t1 328623460 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 +1 -128 127 +2 98 -105 +checksum table t1; +Table Checksum +test.t1 328623460 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 +1 -128 127 +2 98 -105 +checksum table t1; +Table Checksum +test.t1 328623460 +drop table t1; +test6 +create table t1(id int, c1 tinyint, c2 tinyint); +insert into t1 values(1, -128, 127); +insert into t1 values(2, 98, -105); +select * from t1; +id c1 c2 +1 -128 127 +2 98 -105 +alter table t1 modify column id bigint, modify column c1 mediumint, modify column c2 mediumint,algorithm=instant; +select * from t1; +id c1 c2 +1 -128 127 +2 98 -105 +checksum table t1; +Table Checksum +test.t1 3009154580 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 +1 -128 127 +2 98 -105 +checksum table t1; +Table Checksum +test.t1 3009154580 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 +1 -128 127 +2 98 -105 +checksum table t1; +Table Checksum +test.t1 3009154580 +drop table t1; +test7 +create table t1(id int, c1 tinyint unsigned, c2 tinyint unsigned); +insert into t1 values(1, 255, 127); +insert into t1 values(2, 98, 128); +select * from t1; +id c1 c2 +1 255 127 +2 98 128 +alter table t1 modify column id bigint, modify column c1 int unsigned, modify column c2 int unsigned,algorithm=instant; +select * from t1; +id c1 c2 +1 255 127 +2 98 128 +checksum table t1; +Table Checksum +test.t1 2471765203 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 +1 255 127 +2 98 128 +checksum table t1; +Table Checksum +test.t1 2471765203 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 +1 255 127 +2 98 128 +checksum table t1; +Table Checksum +test.t1 2471765203 +drop table t1; +test8 +create table t1(id int, c1 int zerofill, c2 int zerofill); +Warnings: +Warning 1681 The ZEROFILL attribute is deprecated and will be removed in a future release. Use the LPAD function to zero-pad numbers, or store the formatted numbers in a CHAR column. +Warning 1681 The ZEROFILL attribute is deprecated and will be removed in a future release. Use the LPAD function to zero-pad numbers, or store the formatted numbers in a CHAR column. +insert into t1 values(1, 2147483648, 2147483647); +insert into t1 values(2, 4294967295, 32392); +select * from t1; +id c1 c2 +1 2147483648 2147483647 +2 4294967295 0000032392 +alter table t1 modify column id bigint, modify column c1 bigint zerofill, modify column c2 bigint zerofill,algorithm=instant; +Warnings: +Warning 1681 The ZEROFILL attribute is deprecated and will be removed in a future release. Use the LPAD function to zero-pad numbers, or store the formatted numbers in a CHAR column. +Warning 1681 The ZEROFILL attribute is deprecated and will be removed in a future release. Use the LPAD function to zero-pad numbers, or store the formatted numbers in a CHAR column. +insert into t1 values(9, 18446744073709551615, 4294967299); +select * from t1; +id c1 c2 +1 00000000002147483648 00000000002147483647 +2 00000000004294967295 00000000000000032392 +9 18446744073709551615 00000000004294967299 +checksum table t1; +Table Checksum +test.t1 1017808750 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 +1 00000000002147483648 00000000002147483647 +2 00000000004294967295 00000000000000032392 +9 18446744073709551615 00000000004294967299 +checksum table t1; +Table Checksum +test.t1 1017808750 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 +1 00000000002147483648 00000000002147483647 +2 00000000004294967295 00000000000000032392 +9 18446744073709551615 00000000004294967299 +checksum table t1; +Table Checksum +test.t1 1017808750 +begin; +update t1 set id=10 where id=9; +rollback; +select * from t1; +id c1 c2 +1 00000000002147483648 00000000002147483647 +2 00000000004294967295 00000000000000032392 +9 18446744073709551615 00000000004294967299 +checksum table t1; +Table Checksum +test.t1 1017808750 +drop table t1; +test9 +create table t1(id int, c1 char(10), c2 varchar(10), c3 char(10)) default charset=latin1; +insert into t1 values(1, 'column11', 'column12', 'column13'); +insert into t1 values(2, 'column21', 'column22', 'column23'); +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +alter table t1 modify column id bigint, modify column c1 varchar(20), modify column c2 char(20), modify column c3 char(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 3802302165 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 3802302165 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 3802302165 +begin; +update t1 set id=10 where id=8; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 3802302165 +drop table t1; +test10 +create table t1(id int, c1 char(10), c2 varchar(10), c3 char(10)) default charset=utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, 'column11', 'column12', 'column13'); +insert into t1 values(2, 'column21', 'column22', 'column23'); +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +alter table t1 modify column id bigint, modify column c1 varchar(20), modify column c2 char(20), modify column c3 char(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 2496892777 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 2496892777 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 2496892777 +begin; +update t1 set id=10 where id=8; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 2496892777 +drop table t1; +test11 +create table t1(id int, c1 char(10), c2 varchar(10), c3 char(10)) default charset=utf8mb4; +insert into t1 values(1, 'column11', 'column12', 'column13'); +insert into t1 values(2, 'column21', 'column22', 'column23'); +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +alter table t1 modify column id bigint, modify column c1 varchar(20), modify column c2 char(20), modify column c3 char(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 23808844 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 23808844 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 23808844 +begin; +update t1 set id=10 where id=8; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 23808844 +drop table t1; +test12 +create table t1(id int, c1 binary(10), c2 varbinary(10), c3 binary(10)); +insert into t1 values(1, 'column11', 'column12', 'column13'); +insert into t1 values(2, 'column21', 'column22', 'column23'); +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +alter table t1 modify column id bigint, modify column c1 varbinary(20), modify column c2 binary(20), modify column c3 binary(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 2246994574 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 2246994574 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 2246994574 +begin; +update t1 set id=10 where id=8; +rollback; +select * from t1; +id c1 c2 c3 +1 column11 column12 column13 +2 column21 column22 column23 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 2246994574 +drop table t1; +test13 +set session character_set_client=utf8mb4; +set session character_set_connection=utf8mb4; +set session character_set_results=utf8mb4; +create table t1(id int, c1 char(10), c2 varchar(10), c3 char(10)) ENGINE=InnoDB default charset=utf8mb4; +insert into t1 values(1, '测试用例11', '测试用例12', '你好你好你好你好你好'); +insert into t1 values(2, '测试用例21', '测试用例22', '测试用例233333'); +select * from t1; +id c1 c2 c3 +1 测试用例11 测试用例12 你好你好你好你好你好 +2 测试用例21 测试用例22 测试用例233333 +alter table t1 modify column id bigint, modify column c1 varchar(20), modify column c2 char(20), modify column c3 char(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +id c1 c2 c3 +1 测试用例11 测试用例12 你好你好你好你好你好 +2 测试用例21 测试用例22 测试用例233333 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 625812743 +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +id c1 c2 c3 +1 测试用例11 测试用例12 你好你好你好你好你好 +2 测试用例21 测试用例22 测试用例233333 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 625812743 +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +id c1 c2 c3 +1 测试用例11 测试用例12 你好你好你好你好你好 +2 测试用例21 测试用例22 测试用例233333 +8 column8111111 column82222222222222 column83333333 +checksum table t1; +Table Checksum +test.t1 625812743 +drop table t1; +test14 +CREATE TABLE `sbtest7` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`k` int(11) NOT NULL DEFAULT '0', +`c` char(120) NOT NULL DEFAULT '', +`pad` char(60) NOT NULL DEFAULT '', +PRIMARY KEY (`id`), +KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=latin1; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into sbtest7 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +alter table sbtest7 modify column c varchar(240) not null default '',algorithm=instant; +select * from sbtest7; +id k c pad +455119 19982 45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008 58059266282-12236046963-36829385701-89632835700-73658374282 +checksum table sbtest7; +Table Checksum +test.sbtest7 2766999341 +begin; +replace into sbtest7 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519887777777777777','58059266282-12236046963-36829385701-89632835700-73658374282'); +update sbtest7 set c = "abcdefg" where id=455119; +update sbtest7 set c = "45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008999999999999999"; +rollback; +select * from sbtest7; +id k c pad +455119 19982 45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008 58059266282-12236046963-36829385701-89632835700-73658374282 +checksum table sbtest7; +Table Checksum +test.sbtest7 2766999341 +drop table sbtest7; +test15 +set session character_set_client=utf8mb4; +set session character_set_connection=utf8mb4; +set session character_set_results=utf8mb4; +CREATE TABLE `t1` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`k` int(11) NOT NULL DEFAULT '0', +`c` char(120) NOT NULL DEFAULT '', +`pad` char(60) NOT NULL DEFAULT '', +PRIMARY KEY (`id`), +KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=utf8mb4; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into t1 values(455119,19982,'测试测试测试测试测试测试abcdefg测试','58059266282-测试'); +alter table t1 modify column c varchar(240) not null default '',algorithm=instant; +checksum table t1; +Table Checksum +test.t1 4030504194 +begin; +update t1 set c = "测试测试测试测试测试测试abcdefg测试ddd测试"; +rollback; +select * from t1; +id k c pad +455119 19982 测试测试测试测试测试测试abcdefg测试 58059266282-测试 +checksum table t1; +Table Checksum +test.t1 4030504194 +drop table t1; +test16 +set session character_set_client=utf8mb4; +set session character_set_connection=utf8mb4; +set session character_set_results=utf8mb4; +CREATE TABLE `t1` ( +`id` int NOT NULL AUTO_INCREMENT, +`k` int NOT NULL DEFAULT '0', +`c` char(120) BINARY NOT NULL DEFAULT '', +`pad` char(60) BINARY NOT NULL DEFAULT '', +PRIMARY KEY (`id`), +KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=utf8mb4; +Warnings: +Warning 1287 'BINARY as attribute of a type' is deprecated and will be removed in a future release. Please use a CHARACTER SET clause with _bin collation instead +Warning 1287 'BINARY as attribute of a type' is deprecated and will be removed in a future release. Please use a CHARACTER SET clause with _bin collation instead +insert into t1 values(455119,19982,'测试ab测试','58059266282-测试'); +alter table t1 modify column c varchar(240) BINARY not null default '',algorithm=instant; +Warnings: +Warning 1287 'BINARY as attribute of a type' is deprecated and will be removed in a future release. Please use a CHARACTER SET clause with _bin collation instead +checksum table t1; +Table Checksum +test.t1 2835087634 +begin; +update t1 set c = "测试测试测试测试测试测试abcdefg测试ddd测试"; +rollback; +select * from t1; +id k c pad +455119 19982 测试ab测试 58059266282-测试 +checksum table t1; +Table Checksum +test.t1 2835087634 +drop table t1; +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(130) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 130) +); +alter table t1 modify column c81 char(150),algorithm=instant; +checksum table t1; +Table Checksum +test.t1 3265722400 +begin; +update t1 set c81=repeat('策',150); +rollback; +checksum table t1; +Table Checksum +test.t1 3265722400 +drop table t1; +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(150), +c82 char(150) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 150), +repeat('侧', 150) +); +alter table t1 modify column c81 char(160), modify column c82 char(160),algorithm=instant; +checksum table t1; +Table Checksum +test.t1 1555586046 +begin; +update t1 set c81=repeat('策',150); +rollback; +checksum table t1; +Table Checksum +test.t1 1555586046 +drop table t1; +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(150), +c82 char(150) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 150), +repeat('侧', 150) +); +alter table t1 modify column c81 varchar(160), modify column c82 varchar(160),algorithm=instant; +checksum table t1; +Table Checksum +test.t1 3150160946 +begin; +update t1 set c81=repeat('策',150); +rollback; +checksum table t1; +Table Checksum +test.t1 3150160946 +drop table t1; +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(130) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 10) +); +alter table t1 modify column c81 char(200),algorithm=instant; +checksum table t1; +Table Checksum +test.t1 33768929 +begin; +update t1 set c81=repeat('策',180); +rollback; +checksum table t1; +Table Checksum +test.t1 33768929 +drop table t1; +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(10) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 10) +); +alter table t1 modify column c81 char(200),algorithm=instant; +checksum table t1; +Table Checksum +test.t1 33768929 +begin; +update t1 set c81=repeat('策',180); +rollback; +checksum table t1; +Table Checksum +test.t1 33768929 +drop table t1; +create table t1(id int not null primary key,c1 varchar(2000), c2 varchar(2000), c3 varchar(2000),c4 varchar(2500)) engine=innodb, default character set=latin1, row_format=compact; +insert into t1 values(1, repeat('a',2000),repeat('b', 2000),repeat('c',2000),repeat('d',2500)); +alter table t1 modify column c4 varchar(3000); +checksum table t1; +Table Checksum +test.t1 1381998132 +begin; +update t1 set c4 = repeat('e', 3000); +rollback; +checksum table t1; +Table Checksum +test.t1 1381998132 +drop table t1; +create table t1(id int not null primary key,c1 varchar(2000), c2 varchar(2000), c3 char(100),c4 varchar(2000)) engine=innodb, default character set=latin1, row_format=compact; +insert into t1 values(1, repeat('a',2000),repeat('b', 2000),repeat('c',100),repeat('d',2000)); +alter table t1 modify column c3 varchar(3000); +checksum table t1; +Table Checksum +test.t1 3045417034 +begin; +update t1 set c3 = repeat('e', 3000); +rollback; +checksum table t1; +Table Checksum +test.t1 3045417034 +drop table t1; +CREATE TABLE `t1` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`k` int(11) NOT NULL DEFAULT '0', +`c` char(120) NOT NULL DEFAULT '', +`pad` char(60) NOT NULL DEFAULT '', +PRIMARY KEY (`id`), +KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=cp1251; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 1681 Integer display width is deprecated and will be removed in a future release. +insert into t1 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +alter table t1 modify column c varchar(240) not null default '',algorithm=instant; +checksum table t1; +Table Checksum +test.t1 2766999341 +begin; +delete from t1 where id=455119; +insert into t1 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +rollback; +select * from t1; +id k c pad +455119 19982 45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008 58059266282-12236046963-36829385701-89632835700-73658374282 +checksum table t1; +Table Checksum +test.t1 2766999341 +drop table t1; diff --git a/mysql-test/suite/innodb/r/instant_modify_with_update.result b/mysql-test/suite/innodb/r/instant_modify_with_update.result new file mode 100644 index 00000000000..26e156694ed --- /dev/null +++ b/mysql-test/suite/innodb/r/instant_modify_with_update.result @@ -0,0 +1,1480 @@ +# +# 0. simple test +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), +c char(10), d varchar(10), e int); +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +alter table t1 modify a char(20), algorithm=instant; +alter table t1 modify b varchar(20), algorithm=instant; +alter table t1 modify c varchar(20), algorithm=instant; +update t1 set c=repeat('c', 10); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccccc dddddddd 10000 +alter table t1 modify d char(20), algorithm=instant; +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +update t1 set a=repeat('f', 15); +select * from t1; +id a b c d e +1 fffffffffffffff bbbbbbbb cccccccccc dddddddd 10000 +2 fffffffffffffff bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +checksum table t1; +Table Checksum +test.t1 1811472615 +drop table t1; +# +# 1. test int to bigint +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, e int); +INSERT INTO t1 VALUES(1, -1); +INSERT INTO t1 VALUES(2, 1); +INSERT INTO t1 VALUES(3, -2); +INSERT INTO t1 VALUES(4, -2147483648); +INSERT INTO t1 VALUES(5, 2147483647); +INSERT INTO t1 VALUES(6, 0); +select * from t1; +id e +1 -1 +2 1 +3 -2 +4 -2147483648 +5 2147483647 +6 0 +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(7, -1); +select * from t1; +id e +1 -1 +2 1 +3 -2 +4 -2147483648 +5 2147483647 +6 0 +7 -1 +checksum table t1; +Table Checksum +test.t1 3978469463 +drop table t1; +# +# 2. test update after char(10) -> char(20) +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), +c char(10), d varchar(10), e int); +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int NOT NULL AUTO_INCREMENT, + `a` char(20) DEFAULT NULL, + `b` varchar(20) DEFAULT NULL, + `c` varchar(20) DEFAULT NULL, + `d` char(20) DEFAULT NULL, + `e` bigint DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +2 13 16711934 40 +3 12 16711695 40 +4 13 16711934 40 +5 12 16711695 40 +6 6 1027 4 +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +select * from t1 where a=repeat('a', 16); +id a b c d e +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +select * from t1 where a=repeat('a', 8); +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +select * from t1 where b=repeat('b', 16); +id a b c d e +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +select * from t1 where b=repeat('b', 8); +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +select * from t1 where c=repeat('c', 16); +id a b c d e +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +select * from t1 where c=repeat('c', 8); +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +select * from t1 where e=-1; +id a b c d e +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +select id, e+1 from t1; +id e+1 +1 10001 +2 0 +3 1 +4 -2147483647 +5 2147483648 +6 1024 +checksum table t1; +Table Checksum +test.t1 4264101112 +update t1 set a=repeat('f', 15); +select * from t1; +id a b c d e +1 fffffffffffffff bbbbbbbb cccccccc dddddddd 10000 +2 fffffffffffffff bbbbbbbb cccccccc dddddddd -1 +3 fffffffffffffff bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 fffffffffffffff bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 fffffffffffffff bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +6 fffffffffffffff bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +checksum table t1; +Table Checksum +test.t1 3221981337 +drop table t1; +# +# 3. test update after varchar(10) -> varchar(20) +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), +c char(10), d varchar(10), e int); +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +update t1 set b=repeat('f', 15); +select * from t1; +id a b c d e +1 aaaaaaaa fffffffffffffff cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa fffffffffffffff cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa fffffffffffffff cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa fffffffffffffff cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa fffffffffffffff cccccccccccccccc dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa fffffffffffffff cccccccccccccccc dddddddddddddddd 1023 +checksum table t1; +Table Checksum +test.t1 617307341 +drop table t1; +# +# 4. test update after char(10) -> varchar(20) +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), +c char(10), d varchar(10), e int); +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +update t1 set c=repeat('f', 15); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb fffffffffffffff dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb fffffffffffffff dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb fffffffffffffff dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb fffffffffffffff dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb fffffffffffffff dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb fffffffffffffff dddddddddddddddd 1023 +checksum table t1; +Table Checksum +test.t1 1779182538 +drop table t1; +# +# 5. test update after varchar(10) -> char(20) +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), +c char(10), d varchar(10), e int); +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +update t1 set d=repeat('f', 15); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc fffffffffffffff 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc fffffffffffffff -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc fffffffffffffff 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc fffffffffffffff -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc fffffffffffffff 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc fffffffffffffff 1023 +checksum table t1; +Table Checksum +test.t1 3656779784 +drop table t1; +# +# 6. test update after int -> bigint +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), +c char(10), d varchar(10), e int); +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd 1023 +update t1 set e=-1; +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd -1 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccc dddddddd -1 +4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddd -1 +5 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd -1 +6 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbb cccccccccccccccc dddddddddddddddd -1 +checksum table t1; +Table Checksum +test.t1 1614347948 +drop table t1; +# +# 7. test modify small lenght(<128) to big lengh( > 128) +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), +c char(10), d varchar(10), e int); +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +alter table t1 modify a char(251), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); +alter table t1 modify b varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 8), repeat('d', 8), 0); +alter table t1 modify c varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 8), -2147483648); +alter table t1 modify d char(251), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd -1 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccc dddddddd 0 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddd -2147483648 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1023 +update t1 set e=e+1; +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10001 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddd 0 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccc dddddddd 1 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddd -2147483647 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483648 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1024 +checksum table t1; +Table Checksum +test.t1 4217461616 +drop table t1; +# +# 8. test modify big lenght(<128) to big lengh( > 128) +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), +c char(150), d varchar(150), e int); +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); +alter table t1 modify a char(251), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +alter table t1 modify b varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); +alter table t1 modify c varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +alter table t1 modify d char(251), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10000 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -1 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483648 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1023 +update t1 set e=e+1; +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10001 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483647 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483648 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1024 +checksum table t1; +Table Checksum +test.t1 1391411642 +drop table t1; +# +# 9. test modify multiple columns +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), +c char(150), d varchar(150), e int); +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); +alter table t1 modify a char(251), modify b varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); +alter table t1 modify c varchar(251), modify d char(251), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10000 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -1 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483648 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1023 +update t1 set e=e+1; +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10001 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483647 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483648 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1024 +checksum table t1; +Table Checksum +test.t1 1391411642 +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +2 13 16711934 600 +3 12 16715791 600 +4 13 16711934 600 +5 12 16715791 600 +6 6 1027 4 +drop table t1; +# +# 10. test charset latin1 +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), +c char(150), d varchar(150), e int) DEFAULT CHARACTER SET latin1; +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); +alter table t1 modify a char(251), modify b varchar(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); +alter table t1 modify c varchar(251), modify d char(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10000 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -1 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483648 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1023 +update t1 set e=e+1; +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10001 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483647 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483648 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1024 +checksum table t1; +Table Checksum +test.t1 2173957066 +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +2 2 524542 150 +3 1 524303 150 +4 2 524542 150 +5 1 524303 150 +6 6 1027 4 +drop table t1; +# +# 11. test charset utf8 +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), +c char(150), d varchar(150), e int) DEFAULT CHARACTER SET utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); +alter table t1 modify a char(251), modify b varchar(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); +alter table t1 modify c varchar(251), modify d char(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10000 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -1 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483648 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1023 +update t1 set e=e+1; +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10001 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483647 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483648 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1024 +checksum table t1; +Table Checksum +test.t1 2440015615 +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +2 13 2162942 450 +3 12 2166799 450 +4 13 2162942 450 +5 12 2166799 450 +6 6 1027 4 +drop table t1; +# +# 12. test charset utf8mb4 +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), +c char(150), d varchar(150), e int) DEFAULT CHARACTER SET utf8mb4; +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); +alter table t1 modify a char(251), modify b varchar(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); +alter table t1 modify c varchar(251), modify d char(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10000 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -1 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483648 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1023 +update t1 set e=e+1; +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10001 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483647 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483648 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1024 +update t1 set d='xx'; +checksum table t1; +Table Checksum +test.t1 2618674826 +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +2 13 16711934 600 +3 12 16715791 600 +4 13 16711934 600 +5 12 16715791 600 +6 6 1027 4 +drop table t1; +# +# 13. test partition table +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), +c char(150), d varchar(150), e int) DEFAULT CHARACTER SET utf8mb4 +PARTITION BY HASH(id) PARTITIONS 3; +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); +alter table t1 modify a char(251), modify b varchar(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); +alter table t1 modify c varchar(251), modify d char(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); +select * from t1; +id a b c d e +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1023 +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10000 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483648 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -1 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483647 +update t1 set e=e+1; +select * from t1; +id a b c d e +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1024 +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10001 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483647 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483648 +update t1 set d='xx'; +checksum table t1; +Table Checksum +test.t1 2618674826 +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +2 13 16711934 600 +3 12 16715791 600 +4 13 16711934 600 +5 12 16715791 600 +6 6 1027 4 +drop table t1; +# +# 14. test not support temporary table +# +create temporary table t1 (id int not null auto_increment primary key, +a char(10), +b varchar(10), +c char(10), +d varchar(10), e int) default character set utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +alter table t1 modify a char(20), algorithm=instant; +ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY. +alter table t1 modify a char(20); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +alter table t1 modify d char(20); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +0 +insert into t1 values(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 16), 10000); +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +checksum table t1; +Table Checksum +test.t1 3977213340 +drop table t1; +# +# 15. test 中文 +# +create table t1 (id int not null auto_increment primary key, +a char(10), +b varchar(10), +c char(10), +d varchar(10), e int) default character set utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, '中文', '武汉', '上海', '杭州', 10000); +alter table t1 modify a char(20), algorithm=instant; +select * from t1; +id a b c d e +1 中文 武汉 上海 杭州 10000 +alter table t1 modify d char(20), algorithm=instant; +select * from t1; +id a b c d e +1 中文 武汉 上海 杭州 10000 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +2 +insert into t1 values(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 16), 10000); +alter table t1 add f varchar(251), algorithm=instant; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +2 13 2162942 30 +5 12 2162703 30 +update t1 set d=repeat('你好', 2); +checksum table t1; +Table Checksum +test.t1 1601652604 +drop table t1; +# +# 16. test binary/varbinary - latin1 +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a binary(150), b varbinary(150), +c binary(150), d varbinary(150), e int) DEFAULT CHARACTER SET latin1; +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); +alter table t1 modify a binary(251), modify b varbinary(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); +alter table t1 modify c varbinary(251), modify d binary(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10000 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -1 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483648 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1023 +update t1 set e=e+1; +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10001 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483647 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483648 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1024 +update t1 set d='xx'; +checksum table t1; +Table Checksum +test.t1 646697606 +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +2 3 4130046 150 +3 4 4129807 150 +4 3 4130046 150 +5 4 4129807 150 +6 6 1027 4 +drop table t1; +# +# 17. test binary/varbinary - utf8mb4 +# +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a binary(150), b varbinary(150), +c binary(150), d varbinary(150), e int) DEFAULT CHARACTER SET utf8mb4; +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); +alter table t1 modify a binary(251), modify b varbinary(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); +alter table t1 modify c varbinary(251), modify d binary(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10000 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -1 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483648 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483647 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1023 +update t1 set e=e+1; +select * from t1; +id a b c d e +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 10001 +2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 0 +3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1 +4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -2147483647 +5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 2147483648 +6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 1024 +update t1 set d='xx'; +checksum table t1; +Table Checksum +test.t1 646697606 +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +POS MTYPE PRTYPE LEN +2 3 4130046 150 +3 4 4129807 150 +4 3 4130046 150 +5 4 4129807 150 +6 6 1027 4 +drop table t1; +# +# 18. test binary/varbinary +# +create table t1 (id int not null auto_increment primary key, +a binary(10), +b varbinary(10), +c binary(10), +d varbinary(10), e int) default character set utf8; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +alter table t1 modify a binary(20), algorithm=instant; +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +alter table t1 modify b binary(20), algorithm=instant; +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc dddddddd 10000 +update t1 set d='ab'; +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc ab 10000 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +2 +alter table t1 modify c varbinary(20), algorithm=instant; +alter table t1 modify d varbinary(20), algorithm=instant; +insert into t1 values(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 16), 10000); +select * from t1; +id a b c d e +1 aaaaaaaa bbbbbbbb cccccccc ab 10000 +2 aaaaaaaaaaaaaaaa bbbbbbbb cccccccc dddddddddddddddd 10000 +checksum table t1; +Table Checksum +test.t1 633196802 +drop table t1; +# +# 19. test smallint/tinyint/mediumint +# +create table t1 (id int not null auto_increment primary key, +a TINYINT, +b smallint, +c mediumint, +d int(3), +e bigint, f varchar(10)) default character set utf8; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, 1, 1, 1, 1, 1, 'a'); +insert into t1 values(2, -1, -1, -1, -1, -1,'b'); +select * from t1; +id a b c d e f +1 1 1 1 1 1 a +2 -1 -1 -1 -1 -1 b +alter table t1 modify a int(20), algorithm=instant; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +alter table t1 modify b int(20), algorithm=instant; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +alter table t1 modify c int(20), algorithm=instant; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +alter table t1 modify d int(20), algorithm=instant; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +select * from t1; +id a b c d e f +1 1 1 1 1 1 a +2 -1 -1 -1 -1 -1 b +update t1 set f='ab'; +select * from t1; +id a b c d e f +1 1 1 1 1 1 ab +2 -1 -1 -1 -1 -1 ab +checksum table t1; +Table Checksum +test.t1 860400779 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +3 +drop table t1; +create table t1 (id int not null auto_increment primary key, +a TINYINT, +b smallint, +c mediumint, +d int(3), +e bigint, f varchar(10)) default character set utf8; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, 127, 32767, 8388607, 2147483647, 2147483648, 'a'); +insert into t1 values(2, -1, -1, -1, -1, -1,'b'); +select * from t1; +id a b c d e f +1 127 32767 8388607 2147483647 2147483648 a +2 -1 -1 -1 -1 -1 b +alter table t1 modify a bigint, algorithm=instant; +alter table t1 modify b bigint, algorithm=instant; +alter table t1 modify c bigint, algorithm=instant; +alter table t1 modify d bigint, algorithm=instant; +select * from t1; +id a b c d e f +1 127 32767 8388607 2147483647 2147483648 a +2 -1 -1 -1 -1 -1 b +update t1 set f='ab'; +select * from t1; +id a b c d e f +1 127 32767 8388607 2147483647 2147483648 ab +2 -1 -1 -1 -1 -1 ab +checksum table t1; +Table Checksum +test.t1 1430900184 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +4 +drop table t1; +create table t1 (id int not null auto_increment primary key, +a TINYINT, +b smallint, +c mediumint, +d int(3), +e bigint, f varchar(10)) default character set utf8; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, 127, 32767, 8388607, 2147483647, 2147483648, 'a'); +insert into t1 values(2, -1, -1, -1, -1, -1,'b'); +select * from t1; +id a b c d e f +1 127 32767 8388607 2147483647 2147483648 a +2 -1 -1 -1 -1 -1 b +alter table t1 modify a smallint, algorithm=instant; +alter table t1 modify b mediumint, algorithm=instant; +alter table t1 modify c int, algorithm=instant; +alter table t1 modify d bigint, algorithm=instant; +select * from t1; +id a b c d e f +1 127 32767 8388607 2147483647 2147483648 a +2 -1 -1 -1 -1 -1 b +update t1 set f='ab'; +select * from t1; +id a b c d e f +1 127 32767 8388607 2147483647 2147483648 ab +2 -1 -1 -1 -1 -1 ab +checksum table t1; +Table Checksum +test.t1 95940297 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +4 +drop table t1; +create table t1 (id int not null auto_increment primary key, +a TINYINT unsigned, +b smallint unsigned, +c mediumint unsigned, +d int(3) unsigned, +e bigint, f varchar(10)) default character set utf8; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +insert into t1 values(1, 127, 32767, 8388607, 2147483647, 2147483648, 'a'); +insert into t1 values(2, 1, 1, 1, 1, 1,'b'); +select * from t1; +id a b c d e f +1 127 32767 8388607 2147483647 2147483648 a +2 1 1 1 1 1 b +alter table t1 modify a smallint unsigned, algorithm=instant; +alter table t1 modify b mediumint unsigned, algorithm=instant; +alter table t1 modify c int unsigned, algorithm=instant; +alter table t1 modify d bigint unsigned, algorithm=instant; +select * from t1; +id a b c d e f +1 127 32767 8388607 2147483647 2147483648 a +2 1 1 1 1 1 b +update t1 set f='ab'; +select * from t1; +id a b c d e f +1 127 32767 8388607 2147483647 2147483648 ab +2 1 1 1 1 1 ab +checksum table t1; +Table Checksum +test.t1 889330297 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +4 +drop table t1; +# +# 20. test rollback +# +create table t1 (id int not null auto_increment primary key, +a binary(10), +b varbinary(10)); +insert into t1 values(1, repeat('a', 8), repeat('b', 8)); +alter table t1 modify a binary(20), algorithm=instant; +select * from t1; +id a b +1 aaaaaaaa bbbbbbbb +alter table t1 modify b binary(20), algorithm=instant; +select * from t1; +id a b +1 aaaaaaaa bbbbbbbb +begin; +update t1 set a='ab'; +select * from t1; +id a b +1 ab bbbbbbbb +rollback; +select * from t1; +id a b +1 aaaaaaaa bbbbbbbb +begin; +update t1 set b='cd'; +select * from t1; +id a b +1 aaaaaaaa cd +rollback; +select * from t1; +id a b +1 aaaaaaaa bbbbbbbb +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +2 +optimize table t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +include/assert.inc ['checksum matched'] +drop table t1; +create table t1 (id int not null auto_increment primary key, +a char(10), +b varchar(10), +c int); +insert into t1 values(1, repeat('a', 8), repeat('b', 8), -1); +alter table t1 modify a char(20), +modify b varchar(20), +modify c bigint(20), algorithm=instant; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +select * from t1; +id a b c +1 aaaaaaaa bbbbbbbb -1 +begin; +update t1 set a='ab', b='cd', c=100; +select * from t1; +id a b c +1 ab cd 100 +rollback; +select * from t1; +id a b c +1 aaaaaaaa bbbbbbbb -1 +insert into t1 values(2, repeat('a', 8), repeat('b', 8), 2); +select * from t1; +id a b c +1 aaaaaaaa bbbbbbbb -1 +2 aaaaaaaa bbbbbbbb 2 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +3 +checksum table t1; +Table Checksum +test.t1 2735493839 +drop table t1; +create table t1 (id int not null auto_increment primary key, +a char(10), +b varchar(10), +c int); +insert into t1 values(1, repeat('a', 8), repeat('b', 8), -1); +alter table t1 modify a char(20), +modify b varchar(20), +modify c bigint(20), algorithm=instant; +Warnings: +Warning 1681 Integer display width is deprecated and will be removed in a future release. +select * from t1; +id a b c +1 aaaaaaaa bbbbbbbb -1 +begin; +delete from t1; +select * from t1; +id a b c +rollback; +select * from t1; +id a b c +1 aaaaaaaa bbbbbbbb -1 +begin; +insert into t1 values(2, repeat('a', 8), repeat('b', 8), 2); +select * from t1; +id a b c +1 aaaaaaaa bbbbbbbb -1 +2 aaaaaaaa bbbbbbbb 2 +rollback; +select * from t1; +id a b c +1 aaaaaaaa bbbbbbbb -1 +insert into t1 values(2, repeat('a', 8), repeat('b', 8), 2); +select * from t1; +id a b c +1 aaaaaaaa bbbbbbbb -1 +2 aaaaaaaa bbbbbbbb 2 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +3 +checksum table t1; +Table Checksum +test.t1 2735493839 +drop table t1; +# +# 21. test external data +# +create table t1 (id int not null auto_increment primary key, +a char(10), +b varchar(1024), +c int); +insert into t1 values(1, repeat('a', 8), repeat('b', 800), -1); +alter table t1 modify a char(20), +modify b varchar(2048), +modify c bigint, algorithm=instant; +select * from t1; +id a b c +1 aaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -1 +update t1 set a=repeat('a', 16); +select * from t1; +id a b c +1 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -1 +begin; +update t1 set a='ab', b='cd', c=100; +select * from t1; +id a b c +1 ab cd 100 +rollback; +select * from t1; +id a b c +1 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -1 +insert into t1 values(2, repeat('a', 8), repeat('b', 8), 2); +select * from t1; +id a b c +1 aaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -1 +2 aaaaaaaa bbbbbbbb 2 +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +3 +checksum table t1; +Table Checksum +test.t1 2676084602 +drop table t1; +# +# 21. test support modify default value +# +create table t1 (id int not null auto_increment primary key, a char(150) default 'a', b varchar(150)); +insert into t1 values(1, repeat('a', 130), repeat('b', 130)); +alter table t1 modify a char(251), algorithm=instant; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int NOT NULL AUTO_INCREMENT, + `a` char(251) DEFAULT NULL, + `b` varchar(150) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +insert into t1(id,b) values(2, 'b'); +alter table t1 modify b char(251) default 'abc', algorithm=instant; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int NOT NULL AUTO_INCREMENT, + `a` char(251) DEFAULT NULL, + `b` char(251) DEFAULT 'abc', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +insert into t1(id,a) values(3, null); +select count(*) from information_schema.innodb_instant_modified_cols; +count(*) +2 +checksum table t1; +Table Checksum +test.t1 149879731 +drop table t1; +# +# 22. test support modify partition table with update +# +CREATE TABLE client_firms ( +id INT, +name VARCHAR(35), +part binary(10), +pos INT +) +PARTITION BY LIST (id) ( +PARTITION r0 VALUES IN (1, 5, 9, 13, 17, 21), +PARTITION r1 VALUES IN (2, 6, 10, 14, 18, 22), +PARTITION r2 VALUES IN (3, 7, 11, 15, 19, 23), +PARTITION r3 VALUES IN (4, 8, 12, 16, 20, 24) +); +insert into client_firms +values(1,'a',1, 2),(2,'a',1, 3),(3,'bbb',2, 4),(4,'jak',2, +5),(5,'jone',343, 6); +select id, name, cast(part as unsigned), pos from client_firms order by id; +id name cast(part as unsigned) pos +1 a 1 2 +2 a 1 3 +3 bbb 2 4 +4 jak 2 5 +5 jone 343 6 +alter table client_firms modify id bigint ,algorithm=instant; +update client_firms set name = "ccc" where id = 3; +select id, name, cast(part as unsigned), pos from client_firms order by id; +id name cast(part as unsigned) pos +1 a 1 2 +2 a 1 3 +3 ccc 2 4 +4 jak 2 5 +5 jone 343 6 +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +NAME POS VERSION MTYPE PRTYPE LEN +id 1 1 6 1027 4 +checksum table client_firms; +Table Checksum +test.client_firms 136653411 +alter table client_firms modify name varchar(60) ,algorithm=instant; +update client_firms set name = "jak4" where id = 4; +select id, name, cast(part as unsigned), pos from client_firms order by id; +id name cast(part as unsigned) pos +1 a 1 2 +2 a 1 3 +3 ccc 2 4 +4 jak4 2 5 +5 jone 343 6 +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +NAME POS VERSION MTYPE PRTYPE LEN +id 1 1 6 1027 4 +name 2 2 12 16711695 140 +alter table client_firms modify part varbinary(12) ,algorithm=instant; +select id, name, cast(part as unsigned), pos from client_firms order by id; +id name cast(part as unsigned) pos +1 a 1 2 +2 a 1 3 +3 ccc 2 4 +4 jak4 2 5 +5 jone 343 6 +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +NAME POS VERSION MTYPE PRTYPE LEN +id 1 1 6 1027 4 +name 2 2 12 16711695 140 +part 3 3 3 4130046 10 +checksum table client_firms; +Table Checksum +test.client_firms 4016813293 +insert into client_firms values(6,'jek',44, 8),(7,'jane',343, 9); +update client_firms set name = "aaa" where id = 2; +select id, name, cast(part as unsigned), pos from client_firms order by id; +id name cast(part as unsigned) pos +1 a 1 2 +2 aaa 1 3 +3 ccc 2 4 +4 jak4 2 5 +5 jone 343 6 +6 jek 44 8 +7 jane 343 9 +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +NAME POS VERSION MTYPE PRTYPE LEN +id 1 1 6 1027 4 +name 2 2 12 16711695 140 +part 3 3 3 4130046 10 +checksum table client_firms; +Table Checksum +test.client_firms 318924858 +alter table client_firms modify pos bigint ,algorithm=instant; +insert into client_firms values(8,'jek8',55, 10),(9,'jane9',66, 11); +select id, name, cast(part as unsigned), pos from client_firms order by id; +id name cast(part as unsigned) pos +1 a 1 2 +2 aaa 1 3 +3 ccc 2 4 +4 jak4 2 5 +5 jone 343 6 +6 jek 44 8 +7 jane 343 9 +8 jek8 55 10 +9 jane9 66 11 +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +NAME POS VERSION MTYPE PRTYPE LEN +id 1 1 6 1027 4 +name 2 2 12 16711695 140 +part 3 3 3 4130046 10 +pos 4 4 6 1027 4 +checksum table client_firms; +Table Checksum +test.client_firms 790529334 +drop table client_firms; +# +# 23. test support modify table with truncate +# +create table t1 (id int not null auto_increment primary key, a char(150), b varchar(150), c int); +insert into t1 values(1, repeat('a', 130), repeat('b', 130), 100); +select * from t1 order by id; +id a b c +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 100 +alter table t1 modify a char(251), algorithm=instant; +select * from t1 order by id; +id a b c +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 100 +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +NAME POS VERSION MTYPE PRTYPE LEN +a 2 1 13 16711934 600 +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int NOT NULL AUTO_INCREMENT, + `a` char(251) DEFAULT NULL, + `b` varchar(150) DEFAULT NULL, + `c` int DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +alter table t1 modify c bigint, algorithm=instant; +select * from t1 order by id; +id a b c +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 100 +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +NAME POS VERSION MTYPE PRTYPE LEN +a 2 1 13 16711934 600 +c 4 2 6 1027 4 +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int NOT NULL AUTO_INCREMENT, + `a` char(251) DEFAULT NULL, + `b` varchar(150) DEFAULT NULL, + `c` bigint DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +insert into t1(id,b) values(2, 'b'); +select * from t1 order by id; +id a b c +1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 100 +2 NULL b NULL +truncate table t1; +insert into t1 values(3, 'aboc', 'bbb', 10000); +select * from t1 order by id; +id a b c +3 aboc bbb 10000 +alter table t1 modify b char(251) default 'abc', algorithm=instant; +select * from t1 order by id; +id a b c +3 aboc bbb 10000 +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +NAME POS VERSION MTYPE PRTYPE LEN +b 3 1 12 16715791 600 +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int NOT NULL AUTO_INCREMENT, + `a` char(251) DEFAULT NULL, + `b` char(251) DEFAULT 'abc', + `c` bigint DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +NAME POS VERSION MTYPE PRTYPE LEN +b 3 1 12 16715791 600 +drop table t1; +# +# 24. test rollback update +# +CREATE TABLE `t13` (id int primary key, value blob, c int); +select ROW_FORMAT,DATA_LENGTH from information_schema.TABLES where table_name like "t13"; +ROW_FORMAT DATA_LENGTH +Dynamic 16384 +insert into t13 values(1, repeat('A', 8092), 1); +alter table t13 modify c bigint, ALGORITHM = INSTANT; +begin; +update t13 set value = repeat('E', 8101) where id = 1; +rollback; +select * from t13; +id value c +1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 +check table t13; +Table Op Msg_type Msg_text +test.t13 check status OK +begin; +update t13 set value = repeat('E', 8101) where id = 1; +rollback; +select * from t13; +id value c +1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 +check table t13; +Table Op Msg_type Msg_text +test.t13 check status OK +update t13 set value = repeat('E', 8101) where id = 1; +select * from t13; +id value c +1 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 +check table t13; +Table Op Msg_type Msg_text +test.t13 check status OK +drop table t13; +# +# 25. test add/truncate partition +# +CREATE TABLE `t1` ( +`id` int NOT NULL, +`c1_char` char(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT 'abc', +`c2_varchar` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, +`c3_binary` binary(10) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +/*!50100 PARTITION BY RANGE (`id`) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = InnoDB, +PARTITION p1 VALUES LESS THAN (200) ENGINE = InnoDB, +PARTITION p2 VALUES LESS THAN (1500) ENGINE = InnoDB) */; +Warnings: +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +Warning 3778 'utf8mb3_general_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead. +Warning 3719 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. +INSERT INTO `t1` VALUES (1,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'),(2,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'),(3,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'); +insert into t1 values (192,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'); +alter table t1 modify c1_char char(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT 'abc', modify id bigint not null,algorithm=instant; +alter table t1 add partition (partition p3 values less than (2000)); +insert into t1 values (1998,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'); +select * from t1; +id c1_char c2_varchar c3_binary +1 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +2 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +3 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +192 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +1998 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +alter table t1 reorganize partition p0 into (partition p4 values less than (50), partition p5 values less than (100)); +select * from t1; +id c1_char c2_varchar c3_binary +1 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +2 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +3 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +192 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +1998 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +id 1 1 6 1283 4 +c1_char 2 1 2 524542 10 +# restart +select * from test.t1; +id c1_char c2_varchar c3_binary +1 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +2 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +3 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +192 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +1998 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +id 1 1 6 1283 4 +c1_char 2 1 2 524542 10 +alter table t1 truncate partition p4; +select * from t1; +id c1_char c2_varchar c3_binary +192 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +1998 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +id 1 1 6 1283 4 +c1_char 2 1 2 524542 10 +INSERT INTO `t1` VALUES (1,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'),(2,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'),(3,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'); +select * from t1; +id c1_char c2_varchar c3_binary +1 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +2 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +3 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +192 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +1998 SSSSSSSSSS aaaaaaaaaa iiiiiiiiii +truncate table t1; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +# restart +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +alter table t1 modify c1_char char(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT 'abc', algorithm=instant; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +c1_char 2 1 2 524542 20 +alter table t1 drop partition p5; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +c1_char 2 1 2 524542 20 +alter table t1 truncate partition p1,p2,p3,p4; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +NAME POS VERSION MTYPE PRTYPE LEN +drop table t1; diff --git a/mysql-test/suite/innodb/t/instant_modify_column_basic.test b/mysql-test/suite/innodb/t/instant_modify_column_basic.test new file mode 100644 index 00000000000..c9929402a83 --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_column_basic.test @@ -0,0 +1,15 @@ +#--disable_query_log +#SET @@global.innodb_alter_table_default_algorithm=instant; +#--enable_query_log + +--echo ############################################ +--echo # Test instant MODIFY COLUMN for DYNAMIC format +--echo ############################################ +let $row_format = DYNAMIC; +--source suite/innodb/include/instant_modify_column_basic.inc + +--echo ############################################ +--echo # Test instant MODIFY COLUMN for COMPACT format +--echo ############################################ +let $row_format = COMPACT; +--source suite/innodb/include/instant_modify_column_basic.inc diff --git a/mysql-test/suite/innodb/t/instant_modify_limitations.test b/mysql-test/suite/innodb/t/instant_modify_limitations.test new file mode 100644 index 00000000000..a291892b819 --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_limitations.test @@ -0,0 +1,343 @@ +# Support Instant modify Column +# test some error conditions + +# InnoDB does not support compressed tables for page sizes=32k,64k +--source include/have_innodb_max_16k.inc + +--echo # +--echo # Scenario 1: +--echo # Create a small table with row_format compressed and modify instant column should fail +--echo # + +CREATE TABLE t1 (a INT, b INT) ROW_FORMAT=COMPRESSED; + +INSERT INTO t1 VALUES(1, 1), (2, 2), (3, 3), (4, 4), (5, 5); + +# Try to instant modify column +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 modify b bigint, ALGORITHM=INSTANT; + +DROP TABLE t1; + + +--echo # +--echo # Scenario 2: +--echo # Create a temporary table and adding instant column should fail +--echo # + +CREATE TEMPORARY TABLE tmp1(a int, b int); + +--error ER_ALTER_OPERATION_NOT_SUPPORTED +ALTER TABLE tmp1 modify b int, ALGORITHM=INSTANT; + +DROP TABLE tmp1; + +--echo # +--echo # Scenario 3: +--echo # not support change to a larger length +--echo # + +CREATE TABLE t1(id int primary key, b int); + +INSERT INTO t1 VALUES(1, 1), (2, 2), (3, 3), (4, 4), (5, 5); + +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +ALTER TABLE t1 modify b smallint, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +DROP TABLE t1; + +--echo # +--echo # Scenario 4: +--echo # not support change to a smaller length +--echo # + +create table t1 (id int not null auto_increment primary key, + a binary(10), + b varbinary(10), + c binary(10), + d varbinary(10), + e bit(10), + f int, + g decimal(5,2)) default character set utf8; +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); + +alter table t1 modify a binary(20), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support change to smaller length +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify b binary(8), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support change to smaller length +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify c varbinary(8), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support change to smaller length +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify d varbinary(8), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support bit +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify e binary(20), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support decimal +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify g decimal(10,3), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + + +drop table t1; + + +--echo # +--echo # Scenario 5: +--echo # not support change to different types +--echo # + +create table t1 (id int not null auto_increment primary key, + a binary(10), + b varbinary(10), + c binary(10), + d varbinary(10), + e bit(10), + f int, + g decimal(5,2)) default character set utf8; +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); + +--echo # not support binary->varchar +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify a varchar(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support varbinary->varchar +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify b varchar(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support binary->char +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify c char(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support varbinary->char +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify d char(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +drop table t1; + +create table t1 (id int not null auto_increment primary key, + a char(10), + b varchar(10), + c char(10), + d varchar(10), + e bit(10), + f int, + g decimal(5,2)) default character set utf8; +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); + +--echo # not support char->varbinary +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify a varbinary(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support varchar->varbinary +error ER_ALTER_OPERATION_NOT_SUPPORTED; +alter table t1 modify b varbinary(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support char->binary +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify c binary(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support varchar->binary +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify d binary(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support int->char +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify f char(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support char->int +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify f char(100), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + + +drop table t1; + + +--echo # +--echo # Scenario 6: +--echo # not support change nullable, charset, default +--echo # + +create table t1 (id int not null auto_increment primary key, + a binary(10) not null, + b varbinary(10), + c char(10) CHARACTER SET utf8, + d varchar(10) CHARACTER SET latin1, + e bit(10), + f int, + g decimal(5,2)) default character set utf8; +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); + +--echo # not support change nullable +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify a binary(100) null, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support change nullable +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify b binary (100) not null, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support change charset +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify c char(100) CHARACTER SET latin1, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support change charset +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify d char(100) CHARACTER SET utf8, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support signed +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify f bigint unsigned, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + + +drop table t1; + +--echo # +--echo # Scenario 7: +--echo # not support change one column mutiple times +--echo # + +create table t1 (id int not null auto_increment primary key, + a binary(10) not null, + b varbinary(10), + c char(10) CHARACTER SET utf8, + d varchar(10) CHARACTER SET latin1, + e bit(10), + f int, + g decimal(5,2)) default character set utf8; +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), b'1110', 10000, 3.2); + +--echo # support change first time +alter table t1 modify a binary(100) not null, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support change second time +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify a binary(200) not null, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # support change first time +alter table t1 modify b binary(20), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # not support change second time +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify b varbinary(30), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # support change default +alter table t1 modify f bigint default 100, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # support change default +alter table t1 modify f bigint default 10, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + + + +drop table t1; + + +--echo # +--echo # Scenario 8: +--echo # not support change indexed columns +--echo # + +CREATE TABLE t1(a int primary key, b int, c char(10) unique); + +INSERT INTO t1 VALUES(1, 1, 'a'), (2, 2, 'b'), (3, 3, 'c'), (4, 4, 'd'), (5, 5, 'e'); + +ALTER TABLE t1 modify b bigint, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +# not support +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +ALTER TABLE t1 modify a bigint, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +# not support +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +ALTER TABLE t1 modify c char(12), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +select * from t1; + + +DROP TABLE t1; + + + +--echo # +--echo # Scenario 9: +--echo # only support instant modify column, other the drop, add col, add/drop index +--echo # + + +create table t1 (id int, + a binary(10), + b varbinary(10), + c int); +insert into t1 values(1, 'a', 'b', 1); + +#no support +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify c bigint, add d int, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +#no support +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify b binary(20), add index idx(a), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +#no support instant add c1 then instant modify c1 +show create table t1; +alter table t1 add column c1 int, ALGORITHM=INSTANT; +select count(*) from information_schema.innodb_tables where instant_cols <> 0; +insert into t1 values(3, null, null, -1, -1); + +error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON; +alter table t1 modify column c1 bigint, algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; + +show create table t1; +drop table t1; + +# test enum and set +create table t1 (id INT AUTO_INCREMENT PRIMARY KEY, c1 DATE,c2 ENUM('1', '2', '3', 'f'), c3 SET('a', 'b', 'c')); +disable_warnings; +insert into t1 values (1, '2022-10-10 12:43:47', '1', 'a,c');insert into t1 values (2, '2022-10-10 12:43:47', '2', 'b');insert into t1 values (3, '2022-10-10 12:43:47', '2', 'a,b,c');insert into t1 values (4, '2022-10-10 12:43:47', '2', 'b'); +enable_warnings; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +alter table t1 modify c2 ENUM('1', '2', '3', 'g'), algorithm=instant; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +alter table t1 modify c3 SET('a', 'b', 'e', 'f'), algorithm=instant; +# no change, inplace alter +alter table t1 modify c3 SET('a', 'b', 'c', 'e', 'f'), algorithm=instant; +select count(*) from information_schema.innodb_instant_modified_cols; +drop table t1; diff --git a/mysql-test/suite/innodb/t/instant_modify_row_size.test b/mysql-test/suite/innodb/t/instant_modify_row_size.test new file mode 100644 index 00000000000..e8cc546e8a9 --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_row_size.test @@ -0,0 +1,2048 @@ +call mtr.add_suppression("Cannot add field"); +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(2), +c26 char(2), +c27 char(2), +c28 char(2), +c29 char(2), +c30 char(2), +c31 char(2), +c32 char(2), +c33 char(2), +c34 char(2), +c35 char(2), +c36 char(2), +c37 char(2), +c38 char(2), +c39 char(2), +c40 char(2), +c41 char(2), +c42 char(2), +c43 char(2), +c44 char(2), +c45 char(2), +c46 char(2), +c47 char(2), +c48 char(2), +c49 char(2), +c50 char(2), +c51 char(2), +c52 char(2), +c53 char(2), +c54 char(2), +c55 char(2), +c56 char(2), +c57 char(2), +c58 char(2), +c59 char(2), +c60 char(2), +c61 char(2), +c62 char(2), +c63 char(2), +c64 char(2), +c65 char(2), +c66 char(2), +c67 char(2), +c68 char(2), +c69 char(2), +c70 char(2), +c71 char(2), +c72 char(2), +c73 char(2), +c74 char(2), +c75 char(2), +c76 char(2), +c77 char(2), +c78 char(2), +c79 char(2), +c80 char(2), +c81 char(2), +c82 char(2), +c83 char(2), +c84 char(2), +c85 char(2), +c86 char(2), +c87 char(2), +c88 char(2), +c89 char(2), +c90 char(2), +c91 char(2), +c92 char(2), +c93 char(2), +c94 char(2), +c95 char(2), +c96 char(2), +c97 char(2), +c98 char(2), +c99 char(2), +c100 char(2), +c101 char(2), +c102 char(2), +c103 char(2), +c104 char(2), +c105 char(2), +c106 char(2), +c107 char(2), +c108 char(2), +c109 char(2), +c110 char(2), +c111 char(2), +c112 char(2), +c113 char(2), +c114 char(2), +c115 char(2), +c116 char(2), +c117 char(2), +c118 char(2), +c119 char(2), +c120 char(2), +c121 char(2), +c122 char(2), +c123 char(2), +c124 char(2), +c125 char(2), +c126 char(2), +c127 char(2), +c128 char(2), +c129 char(2), +c130 char(2), +c131 char(2), +c132 char(2), +c133 char(2), +c134 char(2), +c135 char(2), +c136 char(2), +c137 char(2), +c138 char(2), +c139 char(2), +c140 char(2), +c141 char(2), +c142 char(2), +c143 char(2), +c144 char(2), +c145 char(2), +c146 char(2), +c147 char(2), +c148 char(2), +c149 char(2), +c150 char(2), +c151 char(2), +c152 char(2), +c153 char(2), +c154 char(2), +c155 char(2), +c156 char(2), +c157 char(2), +c158 char(2), +c159 char(2), +c160 char(2), +c161 char(2), +c162 char(2), +c163 char(2), +c164 char(2), +c165 char(2), +c166 char(2), +c167 char(2), +c168 char(2), +c169 char(2), +c170 char(2), +c171 char(2), +c172 char(2), +c173 char(2), +c174 char(2), +c175 char(2), +c176 char(2), +c177 char(2), +c178 char(2), +c179 char(2), +c180 char(2), +c181 char(2), +c182 char(2), +c183 char(2), +c184 char(2), +c185 char(2), +c186 char(2), +c187 char(2), +c188 char(2), +c189 char(2), +c190 char(2), +c191 char(2), +c192 char(2), +c193 char(2), +c194 char(2), +c195 char(2), +c196 char(2), +c197 char(2), +c198 char(2), +c199 char(2), +c200 char(2), +c201 char(2), +c202 char(2), +c203 char(2), +c204 char(2), +c205 char(2), +c206 char(2), +c207 char(2), +c208 char(2), +c209 char(2), +c210 char(2), +c211 char(2), +c212 char(2), +c213 char(2), +c214 char(2), +c215 char(2), +c216 char(2), +c217 char(2), +c218 char(2), +c219 char(2), +c220 char(2), +c221 char(2), +c222 char(2), +c223 char(2), +c224 char(2), +c225 char(2), +c226 char(2), +c227 char(2), +c228 char(2), +c229 char(2), +c230 char(2), +c231 char(2), +c232 char(2), +c233 char(2), +c234 char(2), +c235 char(2), +c236 char(2), +c237 char(2), +c238 char(2), +c239 char(2), +c240 char(2), +c241 char(2), +c242 char(2), +c243 char(2), +c244 char(2), +c245 char(2), +c246 char(2), +c247 char(2), +c248 char(2), +c249 char(2), +c250 char(2), +c251 char(2), +c252 char(2), +c253 char(2), +c254 char(2), +c255 char(2), +c256 char(2), +c257 char(2), +c258 char(2), +c259 char(2), +c260 char(2), +c261 char(2), +c262 char(2), +c263 char(2), +c264 char(2), +c265 char(2), +c266 char(2), +c267 char(2), +c268 char(2), +c269 char(2), +c270 char(2), +c271 char(2), +c272 char(2), +c273 char(2), +c274 char(2), +c275 char(2), +c276 char(2), +c277 char(2), +c278 char(2), +c279 char(2), +c280 char(2), +c281 char(2), +c282 char(2), +c283 char(2), +c284 char(2), +c285 char(2), +c286 char(2), +c287 char(2), +c288 char(2), +c289 char(2), +c290 char(2), +c291 char(2), +c292 char(2), +c293 char(2), +c294 char(2), +c295 char(2), +c296 char(2), +c297 char(2), +c298 char(2), +c299 char(2), +c300 char(2), +c301 char(2), +c302 char(2), +c303 char(2), +c304 char(2), +c305 char(2), +c306 char(2), +c307 char(2), +c308 char(2), +c309 char(2), +c310 char(2), +c311 char(2), +c312 char(2), +c313 char(2), +c314 char(2), +c315 char(2), +c316 char(2), +c317 char(2), +c318 char(2), +c319 char(2), +c320 char(2), +c321 char(2), +c322 char(2), +c323 char(2), +c324 char(2), +c325 char(2), +c326 char(2), +c327 char(2), +c328 char(2), +c329 char(2), +c330 char(2), +c331 char(2), +c332 char(2), +c333 char(2), +c334 char(2), +c335 char(2), +c336 char(2), +c337 char(2), +c338 char(2), +c339 char(2), +c340 char(2), +c341 char(2), +c342 char(2), +c343 char(2), +c344 char(2), +c345 char(2), +c346 char(2), +c347 char(2), +c348 char(2), +c349 char(2), +c350 char(2), +c351 char(2), +c352 char(2), +c353 char(2), +c354 char(2), +c355 char(2), +c356 char(2), +c357 char(2), +c358 char(2), +c359 char(2), +c360 char(2), +c361 char(2), +c362 char(2), +c363 char(2), +c364 char(2), +c365 char(2), +c366 char(2), +c367 char(2), +c368 char(2), +c369 char(2), +c370 char(2), +c371 char(2), +c372 char(2), +c373 char(2), +c374 char(2), +c375 char(2), +c376 char(2), +c377 char(2), +c378 char(2), +c379 char(2), +c380 char(2), +c381 char(2), +c382 char(2), +c383 char(2), +c384 char(2), +c385 char(2), +c386 char(2), +c387 char(2), +c388 char(2), +c389 char(2), +c390 char(2), +c391 char(2), +c392 char(2), +c393 char(2), +c394 char(2), +c395 char(2), +c396 char(2), +c397 char(2), +c398 char(2), +c399 char(2), +c400 char(2), +c401 char(2), +c402 char(2), +c403 char(2), +c404 char(2), +c405 char(2), +c406 char(2), +c407 char(2), +c408 char(2), +c409 char(2), +c410 char(2), +c411 char(2), +c412 char(2), +c413 char(2), +c414 char(2), +c415 char(2), +c416 char(2), +c417 char(2), +c418 char(2), +c419 char(2), +c420 char(2), +c421 char(2), +c422 char(2), +c423 char(2), +c424 char(2), +c425 char(2), +c426 char(2), +c427 char(2), +c428 char(2), +c429 char(2), +c430 char(2), +c431 char(2), +c432 char(2), +c433 char(2), +c434 char(2), +c435 char(2), +c436 char(2), +c437 char(2), +c438 char(2), +c439 char(2), +c440 char(2), +c441 char(2), +c442 char(2), +c443 char(2), +c444 char(2), +c445 char(2), +c446 char(2), +c447 char(2), +c448 char(2), +c449 char(2), +c450 char(2), +c451 char(2), +c452 char(2), +c453 char(2), +c454 char(2), +c455 char(2), +c456 char(2), +c457 char(2), +c458 char(2), +c459 char(2), +c460 char(2), +c461 char(2), +c462 char(2), +c463 char(2), +c464 char(2), +c465 char(2), +c466 char(2), +c467 char(2), +c468 char(2), +c469 char(2), +c470 char(2), +c471 char(2), +c472 char(2), +c473 char(2), +c474 char(2), +c475 char(2), +c476 char(2), +c477 char(2), +c478 char(2), +c479 char(2), +c480 char(2), +c481 char(2), +c482 char(2), +c483 char(2), +c484 char(2), +c485 char(2), +c486 char(2), +c487 char(2), +c488 char(2), +c489 char(2), +c490 char(2), +c491 char(2), +c492 char(2), +c493 char(2), +c494 char(2), +c495 char(2), +c496 char(2), +c497 char(2), +c498 char(2), +c499 char(2), +c500 char(2), +c501 char(2), +c502 char(2), +c503 char(2), +c504 char(2), +c505 char(2), +c506 char(2), +c507 char(2), +c508 char(2), +c509 char(2), +c510 char(2), +c511 char(2), +c512 char(2), +c513 char(2), +c514 char(2), +c515 char(2), +c516 char(2), +c517 char(2), +c518 char(2), +c519 char(2), +c520 char(2), +c521 char(2), +c522 char(2), +c523 char(2), +c524 char(2), +c525 char(2), +c526 char(2), +c527 char(2), +c528 char(2), +c529 char(2), +c530 char(2), +c531 char(2), +c532 char(2), +c533 char(2), +c534 char(2), +c535 char(2), +c536 char(2), +c537 char(2), +c538 char(2), +c539 char(2), +c540 char(2), +c541 char(2), +c542 char(2), +c543 char(2), +c544 char(2), +c545 char(2), +c546 char(2), +c547 char(2), +c548 char(2), +c549 char(2), +c550 char(2), +c551 char(2), +c552 char(2), +c553 char(2), +c554 char(2), +c555 char(2), +c556 char(2), +c557 char(2), +c558 char(2), +c559 char(2), +c560 char(2), +c561 char(2), +c562 char(2), +c563 char(2), +c564 char(2), +c565 char(2), +c566 char(2), +c567 char(2), +c568 char(2), +c569 char(2), +c570 char(2), +c571 char(2), +c572 char(2), +c573 char(2), +c574 char(2), +c575 char(2), +c576 char(2), +c577 char(2), +c578 char(2), +c579 char(2), +c580 char(2), +c581 char(2), +c582 char(2), +c583 char(2), +c584 char(2), +c585 char(2), +c586 char(2), +c587 char(2), +c588 char(2), +c589 char(2), +c590 char(2), +c591 char(2), +c592 char(2), +c593 char(2), +c594 char(2), +c595 char(2), +c596 char(2), +c597 char(2), +c598 char(2), +c599 char(2), +c600 char(2), +c601 char(2), +c602 char(2), +c603 char(2), +c604 char(2), +c605 char(2), +c606 char(2), +c607 char(2), +c608 char(2), +c609 char(2), +c610 char(2), +c611 char(2), +c612 char(2), +c613 char(2), +c614 char(2), +c615 char(2), +c616 char(2), +c617 char(2), +c618 char(2), +c619 char(2), +c620 char(2), +c621 char(2), +c622 char(2), +c623 char(2), +c624 char(2), +c625 char(2), +c626 char(2), +c627 char(2), +c628 char(2), +c629 char(2), +c630 char(2), +c631 char(2), +c632 char(2), +c633 char(2), +c634 char(2), +c635 char(2), +c636 char(2), +c637 char(2), +c638 char(2), +c639 char(2), +c640 char(2), +c641 char(2), +c642 char(2), +c643 char(2), +c644 char(2), +c645 char(2), +c646 char(2), +c647 char(2), +c648 char(2), +c649 char(2), +c650 char(2), +c651 char(2), +c652 char(2), +c653 char(2), +c654 char(2), +c655 char(2), +c656 char(2), +c657 char(2), +c658 char(2), +c659 char(2), +c660 char(2), +c661 char(2), +c662 char(2), +c663 char(2), +c664 char(2), +c665 char(2), +c666 char(2), +c667 char(2), +c668 char(2), +c669 char(2), +c670 char(2), +c671 char(2), +c672 char(2), +c673 char(2), +c674 char(2), +c675 char(2), +c676 char(2), +c677 char(2), +c678 char(2), +c679 char(2), +c680 char(2), +c681 char(2), +c682 char(2), +c683 char(2), +c684 char(2), +c685 char(2), +c686 char(2), +c687 char(2), +c688 char(2), +c689 char(2), +c690 char(2), +c691 char(2), +c692 char(2), +c693 char(2), +c694 char(2), +c695 char(2), +c696 char(2), +c697 char(2), +c698 char(2), +c699 char(2), +c700 char(2), +c701 char(2), +c702 char(2), +c703 char(2), +c704 char(2), +c705 char(2), +c706 char(2), +c707 char(2), +c708 char(2), +c709 char(2), +c710 char(2), +c711 char(2), +c712 char(2), +c713 char(2), +c714 char(2), +c715 char(2), +c716 char(2), +c717 char(2), +c718 char(2), +c719 char(2), +c720 char(2), +c721 char(2), +c722 char(2), +c723 char(2), +c724 char(2), +c725 char(2), +c726 char(2), +c727 char(2), +c728 char(2), +c729 char(2), +c730 char(2), +c731 char(2), +c732 char(2), +c733 char(2), +c734 char(2), +c735 char(2), +c736 char(2), +c737 char(2), +c738 char(2), +c739 char(2), +c740 char(2), +c741 char(2), +c742 char(2), +c743 char(2), +c744 char(2), +c745 char(2), +c746 char(2), +c747 char(2), +c748 char(2), +c749 char(2), +c750 char(2), +c751 char(2), +c752 char(2), +c753 char(2), +c754 char(2), +c755 char(2), +c756 char(2), +c757 char(2), +c758 char(2), +c759 char(2), +c760 char(2), +c761 char(2), +c762 char(2), +c763 char(2), +c764 char(2), +c765 char(2), +c766 char(2), +c767 char(2), +c768 char(2), +c769 char(2), +c770 char(2), +c771 char(2), +c772 char(2), +c773 char(2), +c774 char(2), +c775 char(2), +c776 char(2), +c777 char(2), +c778 char(2), +c779 char(2), +c780 char(2), +c781 char(2), +c782 char(2), +c783 char(2), +c784 char(2), +c785 char(2), +c786 char(2), +c787 char(2), +c788 char(2), +c789 char(2), +c790 char(2), +c791 char(2), +c792 char(2), +c793 char(2), +c794 char(2), +c795 char(2), +c796 char(2), +c797 char(2), +c798 char(2), +c799 char(2), +c800 char(2), +c801 char(2), +c802 char(2), +c803 char(2), +c804 char(2), +c805 char(2), +c806 char(2), +c807 char(2), +c808 char(2), +c809 char(2), +c810 char(2), +c811 char(2), +c812 char(2), +c813 char(2), +c814 char(2), +c815 char(2), +c816 char(2), +c817 char(2), +c818 char(2), +c819 char(2), +c820 char(2), +c821 char(2), +c822 char(2), +c823 char(2), +c824 char(2), +c825 char(2), +c826 char(2), +c827 char(2), +c828 char(2), +c829 char(2), +c830 char(2), +c831 char(2), +c832 char(2), +c833 char(2), +c834 char(2), +c835 char(2), +c836 char(2), +c837 char(2), +c838 char(2), +c839 char(2), +c840 char(2), +c841 char(2), +c842 char(2), +c843 char(2), +c844 char(2), +c845 char(2), +c846 char(2), +c847 char(2), +c848 char(2), +c849 char(2), +c850 char(2), +c851 char(2), +c852 char(2), +c853 char(2), +c854 char(2), +c855 char(2), +c856 char(2), +c857 char(2), +c858 char(2), +c859 char(2), +c860 char(2), +c861 char(2), +c862 char(2), +c863 char(2), +c864 char(2), +c865 char(2), +c866 char(2), +c867 char(2), +c868 char(2), +c869 char(2), +c870 char(2), +c871 char(2), +c872 char(2), +c873 char(2), +c874 char(2), +c875 char(2), +c876 char(2), +c877 char(2), +c878 char(2), +c879 char(2), +c880 char(2), +c881 char(2), +c882 char(2), +c883 char(2), +c884 char(2), +c885 char(2), +c886 char(2), +c887 char(2), +c888 char(2), +c889 char(2), +c890 char(2), +c891 char(2), +c892 char(2), +c893 char(2), +c894 char(2), +c895 char(2), +c896 char(2), +c897 char(2), +c898 char(2), +c899 char(2), +c900 char(2), +c901 char(2), +c902 char(2), +c903 char(2), +c904 char(2), +c905 char(2), +c906 char(2), +c907 char(2), +c908 char(2), +c909 char(2), +c910 char(2), +c911 char(2), +c912 char(2), +c913 char(2), +c914 char(2), +c915 char(2), +c916 char(2), +c917 char(2), +c918 char(2), +c919 char(2), +c920 char(2), +c921 char(2), +c922 char(2), +c923 char(2), +c924 char(2), +c925 char(2), +c926 char(2), +c927 char(2), +c928 char(2), +c929 char(2), +c930 char(2), +c931 char(2), +c932 char(2), +c933 char(2), +c934 char(2), +c935 char(2), +c936 char(2), +c937 char(2), +c938 char(2), +c939 char(2), +c940 char(2), +c941 char(2), +c942 char(2), +c943 char(2), +c944 char(2), +c945 char(2), +c946 char(2), +c947 char(2), +c948 char(2), +c949 char(2), +c950 char(2), +c951 char(2), +c952 char(2), +c953 char(2), +c954 char(2), +c955 char(2), +c956 char(2), +c957 char(2), +c958 char(2), +c959 char(2), +c960 char(2), +c961 char(2), +c962 char(2), +c963 char(2), +c964 char(2), +c965 char(2), +c966 char(2), +c967 char(2), +c968 char(2), +c969 char(2), +c970 char(2), +c971 char(2), +c972 char(2), +c973 char(2), +c974 char(2), +c975 char(2), +c976 char(2), +c977 char(2), +c978 char(2), +c979 char(2), +c980 char(2), +c981 char(2), +c982 char(2), +c983 char(2), +c984 char(2), +c985 char(2), +c986 char(2), +c987 char(2), +c988 char(2), +c989 char(2), +c990 char(2), +c991 char(2), +c992 char(2), +c993 char(2), +c994 char(2), +c995 char(2), +c996 char(2), +c997 char(2), +c998 char(2), +c999 char(2), +c1000 char(2), +c1001 char(2), +c1002 char(2), +c1003 char(2), +c1004 char(2), +c1005 char(2), +c1006 char(2), +c1007 char(2), +c1008 char(2), +c1009 char(2), +c1010 char(2), +c1011 char(2), +c1012 char(2), +c1013 char(2), +c1014 char(2), +c1015 char(2)) engine=innodb default character set=UTF8MB3; + +alter table t1 modify column c25 char(100), algorithm=instant; + +# ER_TOO_BIG_ROWSIZE +error ER_INNODB_INSTANT_MODIFY_NOT_SUPPORTED_MAX_SIZE; +alter table t1 modify column c26 char(250), algorithm=instant; + +show create table t1; +drop table t1; + +create table t1( +id int not null, +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(40), +c27 char(2), +c28 char(2), +c29 char(2), +c30 char(2), +c31 char(2), +c32 char(2), +c33 char(2), +c34 char(2), +c35 char(2), +c36 char(2), +c37 char(2), +c38 char(2), +c39 char(2), +c40 char(2), +c41 char(2), +c42 char(2), +c43 char(2), +c44 char(2), +c45 char(2), +c46 char(2), +c47 char(2), +c48 char(2), +c49 char(2), +c50 char(2), +c51 char(2), +c52 char(2), +c53 char(2), +c54 char(2), +c55 char(2), +c56 char(2), +c57 char(2), +c58 char(2), +c59 char(2), +c60 char(2), +c61 char(2), +c62 char(2), +c63 char(2), +c64 char(2), +c65 char(2), +c66 char(2), +c67 char(2), +c68 char(2), +c69 char(2), +c70 char(2), +c71 char(2), +c72 char(2), +c73 char(2), +c74 char(2), +c75 char(2), +c76 char(2), +c77 char(2), +c78 char(2), +c79 char(2), +c80 char(2), +c81 char(2), +c82 char(2), +c83 char(2), +c84 char(2), +c85 char(2), +c86 char(2), +c87 char(2), +c88 char(2), +c89 char(2), +c90 char(2), +c91 char(2), +c92 char(2), +c93 char(2), +c94 char(2), +c95 char(2), +c96 char(2), +c97 char(2), +c98 char(2), +c99 char(2), +c100 char(2), +c101 char(2), +c102 char(2), +c103 char(2), +c104 char(2), +c105 char(2), +c106 char(2), +c107 char(2), +c108 char(2), +c109 char(2), +c110 char(2), +c111 char(2), +c112 char(2), +c113 char(2), +c114 char(2), +c115 char(2), +c116 char(2), +c117 char(2), +c118 char(2), +c119 char(2), +c120 char(2), +c121 char(2), +c122 char(2), +c123 char(2), +c124 char(2), +c125 char(2), +c126 char(2), +c127 char(2), +c128 char(2), +c129 char(2), +c130 char(2), +c131 char(2), +c132 char(2), +c133 char(2), +c134 char(2), +c135 char(2), +c136 char(2), +c137 char(2), +c138 char(2), +c139 char(2), +c140 char(2), +c141 char(2), +c142 char(2), +c143 char(2), +c144 char(2), +c145 char(2), +c146 char(2), +c147 char(2), +c148 char(2), +c149 char(2), +c150 char(2), +c151 char(2), +c152 char(2), +c153 char(2), +c154 char(2), +c155 char(2), +c156 char(2), +c157 char(2), +c158 char(2), +c159 char(2), +c160 char(2), +c161 char(2), +c162 char(2), +c163 char(2), +c164 char(2), +c165 char(2), +c166 char(2), +c167 char(2), +c168 char(2), +c169 char(2), +c170 char(2), +c171 char(2), +c172 char(2), +c173 char(2), +c174 char(2), +c175 char(2), +c176 char(2), +c177 char(2), +c178 char(2), +c179 char(2), +c180 char(2), +c181 char(2), +c182 char(2), +c183 char(2), +c184 char(2), +c185 char(2), +c186 char(2), +c187 char(2), +c188 char(2), +c189 char(2), +c190 char(2), +c191 char(2), +c192 char(2), +c193 char(2), +c194 char(2), +c195 char(2), +c196 char(2), +c197 char(2), +c198 char(2), +c199 char(2), +c200 char(2), +c201 char(2), +c202 char(2), +c203 char(2), +c204 char(2), +c205 char(2), +c206 char(2), +c207 char(2), +c208 char(2), +c209 char(2), +c210 char(2), +c211 char(2), +c212 char(2), +c213 char(2), +c214 char(2), +c215 char(2), +c216 char(2), +c217 char(2), +c218 char(2), +c219 char(2), +c220 char(2), +c221 char(2), +c222 char(2), +c223 char(2), +c224 char(2), +c225 char(2), +c226 char(2), +c227 char(2), +c228 char(2), +c229 char(2), +c230 char(2), +c231 char(2), +c232 char(2), +c233 char(2), +c234 char(2), +c235 char(2), +c236 char(2), +c237 char(2), +c238 char(2), +c239 char(2), +c240 char(2), +c241 char(2), +c242 char(2), +c243 char(2), +c244 char(2), +c245 char(2), +c246 char(2), +c247 char(2), +c248 char(2), +c249 char(2), +c250 char(2), +c251 char(2), +c252 char(2), +c253 char(2), +c254 char(2), +c255 char(2), +c256 char(2), +c257 char(2), +c258 char(2), +c259 char(2), +c260 char(2), +c261 char(2), +c262 char(2), +c263 char(2), +c264 char(2), +c265 char(2), +c266 char(2), +c267 char(2), +c268 char(2), +c269 char(2), +c270 char(2), +c271 char(2), +c272 char(2), +c273 char(2), +c274 char(2), +c275 char(2), +c276 char(2), +c277 char(2), +c278 char(2), +c279 char(2), +c280 char(2), +c281 char(2), +c282 char(2), +c283 char(2), +c284 char(2), +c285 char(2), +c286 char(2), +c287 char(2), +c288 char(2), +c289 char(2), +c290 char(2), +c291 char(2), +c292 char(2), +c293 char(2), +c294 char(2), +c295 char(2), +c296 char(2), +c297 char(2), +c298 char(2), +c299 char(2), +c300 char(2), +c301 char(2), +c302 char(2), +c303 char(2), +c304 char(2), +c305 char(2), +c306 char(2), +c307 char(2), +c308 char(2), +c309 char(2), +c310 char(2), +c311 char(2), +c312 char(2), +c313 char(2), +c314 char(2), +c315 char(2), +c316 char(2), +c317 char(2), +c318 char(2), +c319 char(2), +c320 char(2), +c321 char(2), +c322 char(2), +c323 char(2), +c324 char(2), +c325 char(2), +c326 char(2), +c327 char(2), +c328 char(2), +c329 char(2), +c330 char(2), +c331 char(2), +c332 char(2), +c333 char(2), +c334 char(2), +c335 char(2), +c336 char(2), +c337 char(2), +c338 char(2), +c339 char(2), +c340 char(2), +c341 char(2), +c342 char(2), +c343 char(2), +c344 char(2), +c345 char(2), +c346 char(2), +c347 char(2), +c348 char(2), +c349 char(2), +c350 char(2), +c351 char(2), +c352 char(2), +c353 char(2), +c354 char(2), +c355 char(2), +c356 char(2), +c357 char(2), +c358 char(2), +c359 char(2), +c360 char(2), +c361 char(2), +c362 char(2), +c363 char(2), +c364 char(2), +c365 char(2), +c366 char(2), +c367 char(2), +c368 char(2), +c369 char(2), +c370 char(2), +c371 char(2), +c372 char(2), +c373 char(2), +c374 char(2), +c375 char(2), +c376 char(2), +c377 char(2), +c378 char(2), +c379 char(2), +c380 char(2), +c381 char(2), +c382 char(2), +c383 char(2), +c384 char(2), +c385 char(2), +c386 char(2), +c387 char(2), +c388 char(2), +c389 char(2), +c390 char(2), +c391 char(2), +c392 char(2), +c393 char(2), +c394 char(2), +c395 char(2), +c396 char(2), +c397 char(2), +c398 char(2), +c399 char(2), +c400 char(2), +c401 char(2), +c402 char(2), +c403 char(2), +c404 char(2), +c405 char(2), +c406 char(2), +c407 char(2), +c408 char(2), +c409 char(2), +c410 char(2), +c411 char(2), +c412 char(2), +c413 char(2), +c414 char(2), +c415 char(2), +c416 char(2), +c417 char(2), +c418 char(2), +c419 char(2), +c420 char(2), +c421 char(2), +c422 char(2), +c423 char(2), +c424 char(2), +c425 char(2), +c426 char(2), +c427 char(2), +c428 char(2), +c429 char(2), +c430 char(2), +c431 char(2), +c432 char(2), +c433 char(2), +c434 char(2), +c435 char(2), +c436 char(2), +c437 char(2), +c438 char(2), +c439 char(2), +c440 char(2), +c441 char(2), +c442 char(2), +c443 char(2), +c444 char(2), +c445 char(2), +c446 char(2), +c447 char(2), +c448 char(2), +c449 char(2), +c450 char(2), +c451 char(2), +c452 char(2), +c453 char(2), +c454 char(2), +c455 char(2), +c456 char(2), +c457 char(2), +c458 char(2), +c459 char(2), +c460 char(2), +c461 char(2), +c462 char(2), +c463 char(2), +c464 char(2), +c465 char(2), +c466 char(2), +c467 char(2), +c468 char(2), +c469 char(2), +c470 char(2), +c471 char(2), +c472 char(2), +c473 char(2), +c474 char(2), +c475 char(2), +c476 char(2), +c477 char(2), +c478 char(2), +c479 char(2), +c480 char(2), +c481 char(2), +c482 char(2), +c483 char(2), +c484 char(2), +c485 char(2), +c486 char(2), +c487 char(2), +c488 char(2), +c489 char(2), +c490 char(2), +c491 char(2), +c492 char(2), +c493 char(2), +c494 char(2), +c495 char(2), +c496 char(2), +c497 char(2), +c498 char(2), +c499 char(2), +c500 char(2), +c501 char(2), +c502 char(2), +c503 char(2), +c504 char(2), +c505 char(2), +c506 char(2), +c507 char(2), +c508 char(2), +c509 char(2), +c510 char(2), +c511 char(2), +c512 char(2), +c513 char(2), +c514 char(2), +c515 char(2), +c516 char(2), +c517 char(2), +c518 char(2), +c519 char(2), +c520 char(2), +c521 char(2), +c522 char(2), +c523 char(2), +c524 char(2), +c525 char(2), +c526 char(2), +c527 char(2), +c528 char(2), +c529 char(2), +c530 char(2), +c531 char(2), +c532 char(2), +c533 char(2), +c534 char(2), +c535 char(2), +c536 char(2), +c537 char(2), +c538 char(2), +c539 char(2), +c540 char(2), +c541 char(2), +c542 char(2), +c543 char(2), +c544 char(2), +c545 char(2), +c546 char(2), +c547 char(2), +c548 char(2), +c549 char(2), +c550 char(2), +c551 char(2), +c552 char(2), +c553 char(2), +c554 char(2), +c555 char(2), +c556 char(2), +c557 char(2), +c558 char(2), +c559 char(2), +c560 char(2), +c561 char(2), +c562 char(2), +c563 char(2), +c564 char(2), +c565 char(2), +c566 char(2), +c567 char(2), +c568 char(2), +c569 char(2), +c570 char(2), +c571 char(2), +c572 char(2), +c573 char(2), +c574 char(2), +c575 char(2), +c576 char(2), +c577 char(2), +c578 char(2), +c579 char(2), +c580 char(2), +c581 char(2), +c582 char(2), +c583 char(2), +c584 char(2), +c585 char(2), +c586 char(2), +c587 char(2), +c588 char(2), +c589 char(2), +c590 char(2), +c591 char(2), +c592 char(2), +c593 char(2), +c594 char(2), +c595 char(2), +c596 char(2), +c597 char(2), +c598 char(2), +c599 char(2), +c600 char(2), +c601 char(2), +c602 char(2), +c603 char(2), +c604 char(2), +c605 char(2), +c606 char(2), +c607 char(2), +c608 char(2), +c609 char(2), +c610 char(2), +c611 char(2), +c612 char(2), +c613 char(2), +c614 char(2), +c615 char(2), +c616 char(2), +c617 char(2), +c618 char(2), +c619 char(2), +c620 char(2), +c621 char(2), +c622 char(2), +c623 char(2), +c624 char(2), +c625 char(2), +c626 char(2), +c627 char(2), +c628 char(2), +c629 char(2), +c630 char(2), +c631 char(2), +c632 char(2), +c633 char(2), +c634 char(2), +c635 char(2), +c636 char(2), +c637 char(2), +c638 char(2), +c639 char(2), +c640 char(2), +c641 char(2), +c642 char(2), +c643 char(2), +c644 char(2), +c645 char(2), +c646 char(2), +c647 char(2), +c648 char(2), +c649 char(2), +c650 char(2), +c651 char(2), +c652 char(2), +c653 char(2), +c654 char(2), +c655 char(2), +c656 char(2), +c657 char(2), +c658 char(2), +c659 char(2), +c660 char(2), +c661 char(2), +c662 char(2), +c663 char(2), +c664 char(2), +c665 char(2), +c666 char(2), +c667 char(2), +c668 char(2), +c669 char(2), +c670 char(2), +c671 char(2), +c672 char(2), +c673 char(2), +c674 char(2), +c675 char(2), +c676 char(2), +c677 char(2), +c678 char(2), +c679 char(2), +c680 char(2), +c681 char(2), +c682 char(2), +c683 char(2), +c684 char(2), +c685 char(2), +c686 char(2), +c687 char(2), +c688 char(2), +c689 char(2), +c690 char(2), +c691 char(2), +c692 char(2), +c693 char(2), +c694 char(2), +c695 char(2), +c696 char(2), +c697 char(2), +c698 char(2), +c699 char(2), +c700 char(2), +c701 char(2), +c702 char(2), +c703 char(2), +c704 char(2), +c705 char(2), +c706 char(2), +c707 char(2), +c708 char(2), +c709 char(2), +c710 char(2), +c711 char(2), +c712 char(2), +c713 char(2), +c714 char(2), +c715 char(2), +c716 char(2), +c717 char(2), +c718 char(2), +c719 char(2), +c720 char(2), +c721 char(2), +c722 char(2), +c723 char(2), +c724 char(2), +c725 char(2), +c726 char(2), +c727 char(2), +c728 char(2), +c729 char(2), +c730 char(2), +c731 char(2), +c732 char(2), +c733 char(2), +c734 char(2), +c735 char(2), +c736 char(2), +c737 char(2), +c738 char(2), +c739 char(2), +c740 char(2), +c741 char(2), +c742 char(2), +c743 char(2), +c744 char(2), +c745 char(2), +c746 char(2), +c747 char(2), +c748 char(2), +c749 char(2), +c750 char(2), +c751 char(2), +c752 char(2), +c753 char(2), +c754 char(2), +c755 char(2), +c756 char(2), +c757 char(2), +c758 char(2), +c759 char(2), +c760 char(2), +c761 char(2), +c762 char(2), +c763 char(2), +c764 char(2), +c765 char(2), +c766 char(2), +c767 char(2), +c768 char(2), +c769 char(2), +c770 char(2), +c771 char(2), +c772 char(2), +c773 char(2), +c774 char(2), +c775 char(2), +c776 char(2), +c777 char(2), +c778 char(2), +c779 char(2), +c780 char(2), +c781 char(2), +c782 char(2), +c783 char(2), +c784 char(2), +c785 char(2), +c786 char(2), +c787 char(2), +c788 char(2), +c789 char(2), +c790 char(2), +c791 char(2), +c792 char(2), +c793 char(2), +c794 char(2), +c795 char(2), +c796 char(2), +c797 char(2), +c798 char(2), +c799 char(2), +c800 char(2), +c801 char(2), +c802 char(2), +c803 char(2), +c804 char(2), +c805 char(2), +c806 char(2), +c807 char(2), +c808 char(2), +c809 char(2), +c810 char(2), +c811 char(2), +c812 char(2), +c813 char(2), +c814 char(2), +c815 char(2), +c816 char(2), +c817 char(2), +c818 char(2), +c819 char(2), +c820 char(2), +c821 char(2), +c822 char(2), +c823 char(2), +c824 char(2), +c825 char(2), +c826 char(2), +c827 char(2), +c828 char(2), +c829 char(2), +c830 char(2), +c831 char(2), +c832 char(2), +c833 char(2), +c834 char(2), +c835 char(2), +c836 char(2), +c837 char(2), +c838 char(2), +c839 char(2), +c840 char(2), +c841 char(2), +c842 char(2), +c843 char(2), +c844 char(2), +c845 char(2), +c846 char(2), +c847 char(2), +c848 char(2), +c849 char(2), +c850 char(2), +c851 char(2), +c852 char(2), +c853 char(2), +c854 char(2), +c855 char(2), +c856 char(2), +c857 char(2), +c858 char(2), +c859 char(2), +c860 char(2), +c861 char(2), +c862 char(2), +c863 char(2), +c864 char(2), +c865 char(2), +c866 char(2), +c867 char(2), +c868 char(2), +c869 char(2), +c870 char(2), +c871 char(2), +c872 char(2), +c873 char(2), +c874 char(2), +c875 char(2), +c876 char(2), +c877 char(2), +c878 char(2), +c879 char(2), +c880 char(2), +c881 char(2), +c882 char(2), +c883 char(2), +c884 char(2), +c885 char(2), +c886 char(2), +c887 char(2), +c888 char(2), +c889 char(2), +c890 char(2), +c891 char(2), +c892 char(2), +c893 char(2), +c894 char(2), +c895 char(2), +c896 char(2), +c897 char(2), +c898 char(2), +c899 char(2), +c900 char(2), +c901 char(2), +c902 char(2), +c903 char(2), +c904 char(2), +c905 char(2), +c906 char(2), +c907 char(2), +c908 char(2), +c909 char(2), +c910 char(2), +c911 char(2), +c912 char(2), +c913 char(2), +c914 char(2), +c915 char(2), +c916 char(2), +c917 char(2), +c918 char(2), +c919 char(2), +c920 char(2), +c921 char(2), +c922 char(2), +c923 char(2), +c924 char(2), +c925 char(2), +c926 char(2), +c927 char(2), +c928 char(2), +c929 char(2), +c930 char(2), +c931 char(2), +c932 char(2), +c933 char(2), +c934 char(2), +c935 char(2), +c936 char(2), +c937 char(2), +c938 char(2), +c939 char(2), +c940 char(2), +c941 char(2), +c942 char(2), +c943 char(2), +c944 char(2), +c945 char(2), +c946 char(2), +c947 char(2), +c948 char(2), +c949 char(2), +c950 char(2), +c951 char(2), +c952 char(2), +c953 char(2), +c954 char(2), +c955 char(2), +c956 char(2), +c957 char(2), +c958 char(2), +c959 char(2), +c960 char(2), +c961 char(2), +c962 char(2), +c963 char(2), +c964 char(2), +c965 char(2), +c966 char(2), +c967 char(2), +c968 char(2), +c969 char(2), +c970 char(2), +c971 char(2), +c972 char(2), +c973 char(2), +c974 char(2), +c975 char(2), +c976 char(2), +c977 char(2), +c978 char(2), +c979 char(2), +c980 char(2), +c981 char(2), +c982 char(2), +c983 char(2), +c984 char(2), +c985 char(2), +c986 char(2), +c987 char(2), +c988 char(2), +c989 char(2), +c990 char(2), +c991 char(2), +c992 char(2), +c993 char(2), +c994 char(2), +c995 char(2), +c996 char(2), +c997 char(2), +c998 char(2), +c999 char(2), +c1000 char(2), +c1001 char(2), +c1002 char(2), +c1003 char(2), +c1004 char(2), +c1005 char(2), +c1006 char(2), +c1007 char(2), +c1008 char(2), +c1009 char(2), +c1010 char(2), +c1011 char(2), +c1012 char(2) +) engine=innodb default character set=UTF8MB3 +PARTITION BY HASH(id) PARTITIONS 3; + +error ER_INNODB_INSTANT_MODIFY_NOT_SUPPORTED_MAX_SIZE; +alter table t1 modify column c28 char(250), algorithm=instant; + +drop table t1; diff --git a/mysql-test/suite/innodb/t/instant_modify_with_gcol.test b/mysql-test/suite/innodb/t/instant_modify_with_gcol.test new file mode 100644 index 00000000000..6cbf55b4b13 --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_with_gcol.test @@ -0,0 +1,39 @@ +--echo # +--echo # modify generated cols +--echo # + + +CREATE TABLE t1 (a INT, b INT GENERATED ALWAYS AS (a), c CHAR(10), d CHAR(20), e CHAR(10) GENERATED ALWAYS AS (c), g INT); +INSERT INTO t1 VALUES(10, DEFAULT, "aa", "bb", DEFAULT, 20); +INSERT INTO t1 VALUES(11, DEFAULT, "jj", "kk", DEFAULT, 21); +select * from t1; +alter table t1 modify g bigint, algorithm=instant; +select * from t1; +alter table t1 modify a bigint, algorithm=instant; +select * from t1; +update t1 set g=2; +select * from t1; + +--error ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN +alter table t1 modify b bigint, algorithm=instant; + +--error ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN +alter table t1 modify e varchar(20), algorithm=instant; + +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(12, DEFAULT, "jj", "kk", DEFAULT, 21); +select * from t1; + +update t1 set g=22; +select * from t1; + +update t1 set a=2; +select * from t1; + +update t1 set c=2; +select * from t1; + +checksum table t1; + +select count(*) from information_schema.innodb_instant_modified_cols; +drop table t1; diff --git a/mysql-test/suite/innodb/t/instant_modify_with_import.test b/mysql-test/suite/innodb/t/instant_modify_with_import.test new file mode 100644 index 00000000000..c9a714332cf --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_with_import.test @@ -0,0 +1,88 @@ +--write_file $MYSQLTEST_VARDIR/tmp/export_instant_modify.inc EOF + FLUSH TABLE t1 FOR EXPORT; + --echo # Copy cfg/ibd files into temp location + --copy_file $MYSQLD_DATADIR/import_test/t1.cfg $MYSQLD_DATADIR/t1.cfg_instant_modify_back + --copy_file $MYSQLD_DATADIR/import_test/t1.ibd $MYSQLD_DATADIR/t1.ibd_instant_modify_back + UNLOCK TABLES; +EOF + +--write_file $MYSQLTEST_VARDIR/tmp/import_instant_modify.inc EOF + ALTER TABLE t1 DISCARD TABLESPACE; + --echo # Copy cfg/ibd files from temp location + --copy_file $MYSQLD_DATADIR/t1.cfg_instant_modify_back $MYSQLD_DATADIR/import_test/t1.cfg + --copy_file $MYSQLD_DATADIR/t1.ibd_instant_modify_back $MYSQLD_DATADIR/import_test/t1.ibd + --error $err_no + ALTER TABLE t1 IMPORT TABLESPACE; +EOF + +call mtr.add_suppression("Export is not supported for instantly modified table"); + +create database import_test; +use import_test; + +--let $MYSQLD_DATADIR = `SELECT @@datadir` + +create table t1(id int,c1 int) engine=innodb; + +insert into t1 values(1,1),(2,2); + +create table t2 like t1; + +--echo # EXPORT +--source $MYSQLTEST_VARDIR/tmp/export_instant_modify.inc + +DROP TABLE t1; +ALTER TABLE t2 RENAME to t1; +SHOW CREATE TABLE t1; + +--echo # IMPORT +--let $err_no=0 +--source $MYSQLTEST_VARDIR/tmp/import_instant_modify.inc +SELECT * FROM t1; + +--remove_file $MYSQLD_DATADIR/t1.cfg_instant_modify_back +--remove_file $MYSQLD_DATADIR/t1.ibd_instant_modify_back + +# test2 export instant modified table +alter table t1 modify column c1 bigint,algorithm=instant; +--echo # EXPORT instant modified table +error ER_ILLEGAL_HA; +FLUSH TABLE t1 FOR EXPORT; + +drop table t1; +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c1 int) DEFAULT CHARACTER SET utf8mb4 + PARTITION BY HASH(id) PARTITIONS 3; + +alter table t1 modify column c1 bigint,algorithm=instant; + +error ER_ILLEGAL_HA; +FLUSH TABLE t1 FOR EXPORT; + +drop table t1; +create table t1(id int)engine=innodb; +alter table t1 add column c1 bigint,algorithm=instant; + +create table t2(id int, c1 int)engine=innodb; +alter table t2 modify column c1 bigint,algorithm=instant; + +--echo # EXPORT +--source $MYSQLTEST_VARDIR/tmp/export_instant_modify.inc + +drop table t1; +ALTER TABLE t2 RENAME to t1; +SHOW CREATE TABLE t1; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +--echo # IMPORT +--let $err_no=ER_TABLE_SCHEMA_MISMATCH +--source $MYSQLTEST_VARDIR/tmp/import_instant_modify.inc + +--remove_file $MYSQLD_DATADIR/t1.cfg_instant_modify_back +--remove_file $MYSQLD_DATADIR/t1.ibd_instant_modify_back + +drop table t1; +--exec rm -rf $MYSQLD_DATADIR/import_test/* +drop database import_test; + +--remove_file $MYSQLTEST_VARDIR/tmp/export_instant_modify.inc +--remove_file $MYSQLTEST_VARDIR/tmp/import_instant_modify.inc diff --git a/mysql-test/suite/innodb/t/instant_modify_with_index.test b/mysql-test/suite/innodb/t/instant_modify_with_index.test new file mode 100644 index 00000000000..b1f909590ac --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_with_index.test @@ -0,0 +1,161 @@ +--echo # +--echo # test add index on instant modified column - char +--echo # + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10)); + +INSERT INTO t1 VALUES(1, repeat('ax', 4), repeat('b', 8)); +INSERT INTO t1 VALUES(2, repeat('xa', 4), repeat('b', 8)); +INSERT INTO t1 VALUES(3, repeat('ac', 4), repeat('b', 8)); +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('ab', 8), repeat('b', 8)); +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 8)); +select count(*) from information_schema.innodb_instant_modified_cols; +select * from t1; + +alter table t1 add index idx(a); +INSERT INTO t1 VALUES(6, repeat('x', 16), repeat('x', 8)); +select count(*) from information_schema.innodb_instant_modified_cols; +select * from t1; + +alter table t1 modify b char(20), algorithm=instant; +INSERT INTO t1 VALUES(7, repeat('y', 16), repeat('y', 16)); +select count(*) from information_schema.innodb_instant_modified_cols; +select * from t1; + +select a from t1 force index(idx); +select a from t1 order by a; + +checksum table t1; + +drop table t1; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # +--echo # test add index on instant modified column - varchar +--echo # + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a varchar(10), b varchar(10)); + +INSERT INTO t1 VALUES(1, repeat('ax', 4), repeat('b', 8)); +INSERT INTO t1 VALUES(2, repeat('xa', 4), repeat('b', 8)); +INSERT INTO t1 VALUES(3, repeat('ac', 4), repeat('b', 8)); +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('ab', 8), repeat('b', 8)); +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 8)); +select count(*) from information_schema.innodb_instant_modified_cols; +select * from t1; + +alter table t1 add index idx(a); +INSERT INTO t1 VALUES(6, repeat('x', 16), repeat('x', 8)); +select count(*) from information_schema.innodb_instant_modified_cols; +select * from t1; + +alter table t1 modify b char(20), algorithm=instant; +INSERT INTO t1 VALUES(7, repeat('y', 16), repeat('y', 16)); +select count(*) from information_schema.innodb_instant_modified_cols; +select * from t1; + +select a from t1 force index(idx); +select a from t1 order by a; + +checksum table t1; + +drop table t1; +select count(*) from information_schema.innodb_instant_modified_cols; + +--echo # +--echo # test add index on instant modified column - int +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a int); + +INSERT INTO t1(a) VALUES(5); +INSERT INTO t1(a) VALUES(1); +INSERT INTO t1(a) VALUES(1000); +INSERT INTO t1(a) VALUES(-1); +INSERT INTO t1(a) VALUES(0); +INSERT INTO t1(a) VALUES(-100); + +alter table t1 modify a bigint, algorithm=instant; +SELECT * FROM t1; + +INSERT INTO t1(a) VALUES(2); +INSERT INTO t1(a) VALUES(pow(2, 40)); +INSERT INTO t1(a) VALUES(pow(2, 60)); + +alter table t1 add key idx(a); + +INSERT INTO t1(a) VALUES(10); + + +select * from t1 where a=-1; +select * from t1 where a=5; + +select a from t1 force index(idx); + +checksum table t1; +select count(*) from information_schema.innodb_instant_modified_cols; +drop table t1; + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a mediumint); + +INSERT INTO t1(a) VALUES(5); +INSERT INTO t1(a) VALUES(1); +INSERT INTO t1(a) VALUES(1000); +INSERT INTO t1(a) VALUES(-1); +INSERT INTO t1(a) VALUES(0); +INSERT INTO t1(a) VALUES(-100); + +alter table t1 modify a bigint, algorithm=instant; +SELECT * FROM t1; + +INSERT INTO t1(a) VALUES(2); +INSERT INTO t1(a) VALUES(pow(2, 40)); +INSERT INTO t1(a) VALUES(pow(2, 60)); + +alter table t1 add key idx(a); + +INSERT INTO t1(a) VALUES(10); + + +select * from t1 where a=-1; +select * from t1 where a=5; + +select a from t1 force index(idx); + +checksum table t1; +select count(*) from information_schema.innodb_instant_modified_cols; +drop table t1; + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a tinyint); + +INSERT INTO t1(a) VALUES(5); +INSERT INTO t1(a) VALUES(1); +INSERT INTO t1(a) VALUES(10); +INSERT INTO t1(a) VALUES(-1); +INSERT INTO t1(a) VALUES(0); +INSERT INTO t1(a) VALUES(-10); + +alter table t1 modify a int, algorithm=instant; +SELECT * FROM t1; + +INSERT INTO t1(a) VALUES(2); +INSERT INTO t1(a) VALUES(pow(2, 30)); +INSERT INTO t1(a) VALUES(pow(2, 20)); + +alter table t1 add key idx(a); + +INSERT INTO t1(a) VALUES(10); + + +select * from t1 where a=-1; +select * from t1 where a=5; + +select a from t1 force index(idx); + +checksum table t1; +select count(*) from information_schema.innodb_instant_modified_cols; +drop table t1; diff --git a/mysql-test/suite/innodb/t/instant_modify_with_online_ddl.test b/mysql-test/suite/innodb/t/instant_modify_with_online_ddl.test new file mode 100644 index 00000000000..af6dad24181 --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_with_online_ddl.test @@ -0,0 +1,75 @@ +--source include/have_debug_sync.inc + +# Save the initial number of concurrent sessions. +--source include/count_sessions.inc + +connection default; + +disable_query_log; +disable_warnings; +drop table if exists test1; +enable_warnings; +enable_query_log; + +create table test1 (id int not null AUTO_INCREMENT, + c1_char char(10) CHARACTER SET latin1 default 'abc', + c2_varchar varchar(10) CHARACTER SET utf8 not null, + c3_binary binary(10), + c4_varbinary varbinary(10) not null default b'111', + c5_tint tinyint default 0, + c6_sint smallint, + c7_mint mediumint signed not null, + c8_int int unsigned unique, + c9_bint bigint, + PRIMARY KEY (id), + KEY test1_key (c9_bint)); + +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('ddd', 10, 20, 30, 40); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 31, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 32, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 33, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 34, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 35, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 36, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 37, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 38, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 39, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 40, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 41, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 42, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 43, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 44, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 45, 80); +insert into test1 (c2_varchar, c6_sint, c7_mint, c8_int, c9_bint) values('eee', 50, 60, 46, 80); + +alter table test1 modify c7_mint int signed not null, modify c5_tint smallint default 1, modify c6_sint int default 100, modify c1_char varchar(20) CHARACTER SET latin1 default 'abc', algorithm=instant; + +alter table test1 add column i int, add column j char(30) default 'abc',add column n int default 1, algorithm=instant; + +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +SET DEBUG_SYNC = 'RESET'; +SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL do_update WAIT_FOR do_log'; +--send +alter table test1 drop primary key, add primary key(id, c6_sint); + +connect (con1,localhost,root,,); +connection con1; +SET DEBUG_SYNC='now WAIT_FOR do_update'; +update test1 set c8_int=55 where id=1; +--sleep 2 +SET DEBUG_SYNC='now SIGNAL do_log'; +disconnect con1; +--echo con1 disconnected + +connection default; +reap; +SET DEBUG_SYNC = 'RESET'; +show create table test1; +select * from test1; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +DROP TABLE test1; + +# Check that all connections opened by test1 cases in this file are really +# gone so execution of other test1s won't be affected by their presence. +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/innodb/t/instant_modify_with_recovery.test b/mysql-test/suite/innodb/t/instant_modify_with_recovery.test new file mode 100644 index 00000000000..56a841071d1 --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_with_recovery.test @@ -0,0 +1,109 @@ +########################################################################## +# Test script to test RECOVERY for table having INSTANT +# ADD/DROP/MODIFY columns. +########################################################################## +--source include/have_debug.inc +--echo # ------------------------------------------------------------ +--echo # Create a table with 3 columns. [id, c1, c2] +--echo # ------------------------------------------------------------ +CREATE TABLE rec_t1(id INT PRIMARY KEY, c1 CHAR(10), c2 CHAR(10)) ROW_FORMAT=dynamic; +CREATE TABLE rec_t2(id INT PRIMARY KEY, c1 CHAR(10), c2 CHAR(10)) ROW_FORMAT=compact; +--let $table_name=rec_t1 +--source suite/innodb/include/print_instant_metadata.inc +--let $table_name=rec_t2 +--source suite/innodb/include/print_instant_metadata.inc + +INSERT INTO rec_t1 VALUES (1, "r1c1", "r1c2"); +insert into rec_t1 values (2, "r2c1", "r2c2"); +SELECT * FROM rec_t1; + +INSERT INTO rec_t2 VALUES (1, "r1c1", "r1c2"); +insert into rec_t2 values (2, "r2c1", "r2c2"); +select * from rec_t1; + +--echo # INSTANT ADD a column +Alter table rec_t1 add column c3 char(10), algorithm=instant; +--let $table_name=rec_t1 +--source suite/innodb/include/print_instant_metadata.inc + +INSERT INTO rec_t1 VALUES (3, "r3c1", "r3c2", "r3c3"); +SELECT * FROM rec_t1; + +alter table rec_t2 add column c3 char(10), algorithm=instant; +--let $table_name=rec_t2 +--source suite/innodb/include/print_instant_metadata.inc +INSERT INTO rec_t2 VALUES (3, "r3c1", "r3c2", "r3c3"); +SELECT * FROM rec_t2; + +--echo # INSTANT DROP a column +Alter table rec_t1 drop column c2 , algorithm=instant; +--let $table_name=rec_t1 +--source suite/innodb/include/print_instant_metadata.inc +INSERT INTO rec_t1 VALUES (4, "r4c1", "r4c3"); +SELECT * FROM rec_t1; + +Alter table rec_t2 drop column c2 , algorithm=instant; +--let $table_name=rec_t2 +--source suite/innodb/include/print_instant_metadata.inc +INSERT INTO rec_t2 VALUES (4, "r4c1", "r4c3"); +SELECT * FROM rec_t2; + +--echo # INSTANT MODIFY a column +alter table rec_t1 modify column c1 varchar(20), algorithm=instant; +--let $table_name=rec_t1 +--source suite/innodb/include/print_instant_metadata.inc +insert into rec_t1 values (5, "r5c1c1c1c1c1", "r5c3"); +select * from rec_t1; + +alter table rec_t2 modify column c1 varchar(20), algorithm=instant; +--let $table_name=rec_t2 +--source suite/innodb/include/print_instant_metadata.inc +insert into rec_t2 values (5, "r5c1c1c1c1c1", "r5c3"); +select * from rec_t2; + +--echo # Make sure nothing gets flushed on disk +SET GLOBAL innodb_log_checkpoint_now = ON; +SET GLOBAL innodb_page_cleaner_disabled_debug = 1; +SET GLOBAL innodb_dict_stats_disabled_debug = 1; +SET GLOBAL innodb_master_thread_disabled_debug = 1; + +--echo # Make inplace update +UPDATE rec_t1 SET c1="r0c0"; + +--echo # Make not-inplace update +UPDATE rec_t1 SET c3="r1c3" WHERE id=1; + +--echo # Insert a new record +INSERT INTO rec_t1 VALUES (6, "r6c1c1c1c1c1", "r6c3"); + +--echo # Delete a record +DELETE FROM rec_t1 WHERE id=2; + +select * from rec_t1; +checksum table rec_t1; + +select * from rec_t2; +checksum table rec_t2; + +# kill and restart the server +--source include/kill_and_restart_mysqld.inc + +#restart the server + +--let $table_name=rec_t1 +--source suite/innodb/include/print_instant_metadata.inc + +SELECT * FROM rec_t1; +checksum table rec_t1; + +--let $table_name=rec_t2 +--source suite/innodb/include/print_instant_metadata.inc + +SELECT * FROM rec_t2; +checksum table rec_t2; + +--echo ########### +--echo # CLEANUP # +--echo ########### +DROP TABLE rec_t1; +drop table rec_t2; diff --git a/mysql-test/suite/innodb/t/instant_modify_with_rollback.test b/mysql-test/suite/innodb/t/instant_modify_with_rollback.test new file mode 100644 index 00000000000..209bba9ecd5 --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_with_rollback.test @@ -0,0 +1,1329 @@ +########################################## +# test1: char to varchar +echo test1; +CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `k` int(11) NOT NULL DEFAULT '0', + `c` char(120) NOT NULL DEFAULT '', + `pad` char(60) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=latin1; +insert into t1 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +alter table t1 modify column c varchar(240) not null default '',algorithm=instant; +checksum table t1; +begin; +delete from t1 where id=455119; +insert into t1 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test2: int to bigint; +echo test2; +create table t1(id int, c1 int, c2 int); +insert into t1 values(1, -2147483648, 2147483647); +insert into t1 values(2, 9981, -1); +select * from t1; +alter table t1 modify column id bigint, modify column c1 bigint, modify column c2 bigint,algorithm=instant; +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test3: mediumint to bigint +echo test3; +create table t1(id int, c1 mediumint, c2 mediumint); +insert into t1 values(1, -8388608, 8388607); +insert into t1 values(2, 9981, -2); +select * from t1; +alter table t1 modify column id bigint, modify column c1 bigint, modify column c2 bigint,algorithm=instant; +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test4: smallint to bigint +echo test4; +create table t1(id int, c1 smallint, c2 smallint); +insert into t1 values(1, -32768, 32767); +insert into t1 values(2, 9981, -9981); +select * from t1; +alter table t1 modify column id bigint, modify column c1 bigint, modify column c2 bigint,algorithm=instant; +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test5: tinyint to bigint +echo test5; +create table t1(id int, c1 tinyint, c2 tinyint); +insert into t1 values(1, -128, 127); +insert into t1 values(2, 98, -105); +select * from t1; +alter table t1 modify column id bigint, modify column c1 bigint, modify column c2 bigint,algorithm=instant; +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test6: tinyint to mediumint +echo test6; +create table t1(id int, c1 tinyint, c2 tinyint); +insert into t1 values(1, -128, 127); +insert into t1 values(2, 98, -105); +select * from t1; +alter table t1 modify column id bigint, modify column c1 mediumint, modify column c2 mediumint,algorithm=instant; +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test7: unsgined tinyint to unsigned int +echo test7; +create table t1(id int, c1 tinyint unsigned, c2 tinyint unsigned); +insert into t1 values(1, 255, 127); +insert into t1 values(2, 98, 128); +select * from t1; +alter table t1 modify column id bigint, modify column c1 int unsigned, modify column c2 int unsigned,algorithm=instant; +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test8: unsgined int to unsigned bigint +echo test8; +create table t1(id int, c1 int zerofill, c2 int zerofill); +insert into t1 values(1, 2147483648, 2147483647); +insert into t1 values(2, 4294967295, 32392); +select * from t1; +alter table t1 modify column id bigint, modify column c1 bigint zerofill, modify column c2 bigint zerofill,algorithm=instant; +insert into t1 values(9, 18446744073709551615, 4294967299); +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=10 where id=9; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test9: char and varchar, charset=latin1 +echo test9; +create table t1(id int, c1 char(10), c2 varchar(10), c3 char(10)) default charset=latin1; +insert into t1 values(1, 'column11', 'column12', 'column13'); +insert into t1 values(2, 'column21', 'column22', 'column23'); +select * from t1; +alter table t1 modify column id bigint, modify column c1 varchar(20), modify column c2 char(20), modify column c3 char(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=10 where id=8; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test10: char and varchar, charset=utf8 +echo test10; +create table t1(id int, c1 char(10), c2 varchar(10), c3 char(10)) default charset=utf8; +insert into t1 values(1, 'column11', 'column12', 'column13'); +insert into t1 values(2, 'column21', 'column22', 'column23'); +select * from t1; +alter table t1 modify column id bigint, modify column c1 varchar(20), modify column c2 char(20), modify column c3 char(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=10 where id=8; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test11: char and varchar, charset=utf8mb4 +echo test11; +create table t1(id int, c1 char(10), c2 varchar(10), c3 char(10)) default charset=utf8mb4; +insert into t1 values(1, 'column11', 'column12', 'column13'); +insert into t1 values(2, 'column21', 'column22', 'column23'); +select * from t1; +alter table t1 modify column id bigint, modify column c1 varchar(20), modify column c2 char(20), modify column c3 char(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=10 where id=8; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test12: binary and varbinary +echo test12; +create table t1(id int, c1 binary(10), c2 varbinary(10), c3 binary(10)); +insert into t1 values(1, 'column11', 'column12', 'column13'); +insert into t1 values(2, 'column21', 'column22', 'column23'); +select * from t1; +alter table t1 modify column id bigint, modify column c1 varbinary(20), modify column c2 binary(20), modify column c3 binary(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=10 where id=8; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +########################################## +# test13: char and varchar, charset=utf8mb4, chinese character +echo test13; +set session character_set_client=utf8mb4; +set session character_set_connection=utf8mb4; +set session character_set_results=utf8mb4; +create table t1(id int, c1 char(10), c2 varchar(10), c3 char(10)) ENGINE=InnoDB default charset=utf8mb4; +insert into t1 values(1, '测试用例11', '测试用例12', '你好你好你好你好你好'); +insert into t1 values(2, '测试用例21', '测试用例22', '测试用例233333'); +select * from t1; +alter table t1 modify column id bigint, modify column c1 varchar(20), modify column c2 char(20), modify column c3 char(20), algorithm=instant; +insert into t1 values(8, 'column8111111', 'column82222222222222', 'column83333333'); +select * from t1; +checksum table t1; +begin; +update t1 set id=3 where id=1; +rollback; +select * from t1; +checksum table t1; + +begin; +update t1 set id=4 where id=2; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +############################## +# test14 char to varchar, replace into +echo test14; +CREATE TABLE `sbtest7` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `k` int(11) NOT NULL DEFAULT '0', + `c` char(120) NOT NULL DEFAULT '', + `pad` char(60) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=latin1; +insert into sbtest7 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +alter table sbtest7 modify column c varchar(240) not null default '',algorithm=instant; +select * from sbtest7; +checksum table sbtest7; +begin; +replace into sbtest7 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519887777777777777','58059266282-12236046963-36829385701-89632835700-73658374282'); +update sbtest7 set c = "abcdefg" where id=455119; +update sbtest7 set c = "45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008999999999999999"; +rollback; +select * from sbtest7; +checksum table sbtest7; +drop table sbtest7; + +############################## +# test15 char to varchar, utf8mb4 +echo test15; +set session character_set_client=utf8mb4; +set session character_set_connection=utf8mb4; +set session character_set_results=utf8mb4; +CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `k` int(11) NOT NULL DEFAULT '0', + `c` char(120) NOT NULL DEFAULT '', + `pad` char(60) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=utf8mb4; +insert into t1 values(455119,19982,'测试测试测试测试测试测试abcdefg测试','58059266282-测试'); +alter table t1 modify column c varchar(240) not null default '',algorithm=instant; +checksum table t1; +begin; +update t1 set c = "测试测试测试测试测试测试abcdefg测试ddd测试"; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +############################## +# test16 char/varchar binary, utf8mb4 +echo test16; +set session character_set_client=utf8mb4; +set session character_set_connection=utf8mb4; +set session character_set_results=utf8mb4; +CREATE TABLE `t1` ( + `id` int NOT NULL AUTO_INCREMENT, + `k` int NOT NULL DEFAULT '0', + `c` char(120) BINARY NOT NULL DEFAULT '', + `pad` char(60) BINARY NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=utf8mb4; +insert into t1 values(455119,19982,'测试ab测试','58059266282-测试'); +alter table t1 modify column c varchar(240) BINARY not null default '',algorithm=instant; +checksum table t1; +begin; +update t1 set c = "测试测试测试测试测试测试abcdefg测试ddd测试"; +rollback; +select * from t1; +checksum table t1; +drop table t1; + +# test17 external data +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(130) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 130) +); +alter table t1 modify column c81 char(150),algorithm=instant; +checksum table t1; +begin; +update t1 set c81=repeat('策',150); +rollback; +checksum table t1; +drop table t1; + +## test18 external data2 +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(150), +c82 char(150) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 150), +repeat('侧', 150) +); +alter table t1 modify column c81 char(160), modify column c82 char(160),algorithm=instant; +checksum table t1; +begin; +update t1 set c81=repeat('策',150); +rollback; +checksum table t1; +drop table t1; + +# test19 external data3 +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(150), +c82 char(150) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 150), +repeat('侧', 150) +); +alter table t1 modify column c81 varchar(160), modify column c82 varchar(160),algorithm=instant; +checksum table t1; +begin; +update t1 set c81=repeat('策',150); +rollback; +checksum table t1; +drop table t1; + +# test20 external data4 +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(130) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 10) +); +alter table t1 modify column c81 char(200),algorithm=instant; +checksum table t1; +begin; +update t1 set c81=repeat('策',180); +rollback; +checksum table t1; +drop table t1; + +# test21 +create table t1( +c1 char(100), +c2 char(100), +c3 char(100), +c4 char(100), +c5 char(100), +c6 char(100), +c7 char(100), +c8 char(100), +c9 char(100), +c10 char(100), +c11 char(100), +c12 char(100), +c13 char(100), +c14 char(100), +c15 char(100), +c16 char(100), +c17 char(100), +c18 char(100), +c19 char(100), +c20 char(100), +c21 char(100), +c22 char(100), +c23 char(100), +c24 char(100), +c25 char(100), +c26 char(100), +c27 char(100), +c28 char(100), +c29 char(100), +c30 char(100), +c31 char(100), +c32 char(100), +c33 char(100), +c34 char(100), +c35 char(100), +c36 char(100), +c37 char(100), +c38 char(100), +c39 char(100), +c40 char(100), +c41 char(100), +c42 char(100), +c43 char(100), +c44 char(100), +c45 char(100), +c46 char(100), +c47 char(100), +c48 char(100), +c49 char(100), +c50 char(100), +c51 char(100), +c52 char(100), +c53 char(100), +c54 char(100), +c55 char(100), +c56 char(100), +c57 char(100), +c58 char(100), +c59 char(100), +c60 char(100), +c61 char(100), +c62 char(100), +c63 char(100), +c64 char(100), +c65 char(100), +c66 char(100), +c67 char(100), +c68 char(100), +c69 char(100), +c70 char(100), +c71 char(100), +c72 char(100), +c73 char(100), +c74 char(100), +c75 char(100), +c76 char(100), +c77 char(100), +c78 char(100), +c79 char(100), +c80 char(100), +c81 char(10) +) engine=innodb, default character set=utf8mb4; +insert into t1 values( +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('测',100), +repeat('册', 10) +); +alter table t1 modify column c81 char(200),algorithm=instant; +checksum table t1; +begin; +update t1 set c81=repeat('策',180); +rollback; +checksum table t1; +drop table t1; + +# test22 +create table t1(id int not null primary key,c1 varchar(2000), c2 varchar(2000), c3 varchar(2000),c4 varchar(2500)) engine=innodb, default character set=latin1, row_format=compact; +insert into t1 values(1, repeat('a',2000),repeat('b', 2000),repeat('c',2000),repeat('d',2500)); +alter table t1 modify column c4 varchar(3000); +checksum table t1; +begin; +update t1 set c4 = repeat('e', 3000); +rollback; +checksum table t1; +drop table t1; + +# test23 +create table t1(id int not null primary key,c1 varchar(2000), c2 varchar(2000), c3 char(100),c4 varchar(2000)) engine=innodb, default character set=latin1, row_format=compact; +insert into t1 values(1, repeat('a',2000),repeat('b', 2000),repeat('c',100),repeat('d',2000)); +alter table t1 modify column c3 varchar(3000); +checksum table t1; +begin; +update t1 set c3 = repeat('e', 3000); +rollback; +checksum table t1; +drop table t1; + +# test24 +CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `k` int(11) NOT NULL DEFAULT '0', + `c` char(120) NOT NULL DEFAULT '', + `pad` char(60) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `k_1` (`k`) +) ENGINE=InnoDB AUTO_INCREMENT=455115 DEFAULT CHARSET=cp1251; +insert into t1 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +alter table t1 modify column c varchar(240) not null default '',algorithm=instant; +checksum table t1; +begin; +delete from t1 where id=455119; +insert into t1 values(455119,19982,'45710173166-55970366418-46110319583-32666806665-59107758310-03100962915-56996749429-13143329136-70160501983-35446519008','58059266282-12236046963-36829385701-89632835700-73658374282'); +rollback; +select * from t1; +checksum table t1; +drop table t1; diff --git a/mysql-test/suite/innodb/t/instant_modify_with_update.test b/mysql-test/suite/innodb/t/instant_modify_with_update.test new file mode 100644 index 00000000000..db0eced68ae --- /dev/null +++ b/mysql-test/suite/innodb/t/instant_modify_with_update.test @@ -0,0 +1,1043 @@ +--echo # +--echo # 0. simple test +--echo # + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), + c char(10), d varchar(10), e int); + +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); + + +alter table t1 modify a char(20), algorithm=instant; +alter table t1 modify b varchar(20), algorithm=instant; +alter table t1 modify c varchar(20), algorithm=instant; +# test not update in place +update t1 set c=repeat('c', 10); +select * from t1; +alter table t1 modify d char(20), algorithm=instant; +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); + +select * from t1; + +update t1 set a=repeat('f', 15); +select * from t1; +checksum table t1; +drop table t1; + + +--echo # +--echo # 1. test int to bigint +--echo # + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, e int); + +INSERT INTO t1 VALUES(1, -1); +INSERT INTO t1 VALUES(2, 1); +INSERT INTO t1 VALUES(3, -2); +INSERT INTO t1 VALUES(4, -2147483648); +INSERT INTO t1 VALUES(5, 2147483647); +INSERT INTO t1 VALUES(6, 0); +select * from t1; + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(7, -1); +select * from t1; +checksum table t1; + +drop table t1; + + +--echo # +--echo # 2. test update after char(10) -> char(20) +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), + c char(10), d varchar(10), e int); + +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); + +select * from t1; + +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); +select * from t1; + +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); +select * from t1; + +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); +select * from t1; + +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); +select * from t1; + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); + +show create table t1; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +select * from t1; +select * from t1 where a=repeat('a', 16); +select * from t1 where a=repeat('a', 8); +select * from t1 where b=repeat('b', 16); +select * from t1 where b=repeat('b', 8); +select * from t1 where c=repeat('c', 16); +select * from t1 where c=repeat('c', 8); +select * from t1 where e=-1; +select id, e+1 from t1; +checksum table t1; + +update t1 set a=repeat('f', 15); +select * from t1; +checksum table t1; + +drop table t1; + +--echo # +--echo # 3. test update after varchar(10) -> varchar(20) +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), + c char(10), d varchar(10), e int); + +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); + + +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); + +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); + +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); + +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); + + +select * from t1; + +update t1 set b=repeat('f', 15); +select * from t1; +checksum table t1; + +drop table t1; + +--echo # +--echo # 4. test update after char(10) -> varchar(20) +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), + c char(10), d varchar(10), e int); + +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); + + +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); + +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); + +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); + +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); + + +select * from t1; + +update t1 set c=repeat('f', 15); +select * from t1; +checksum table t1; + +drop table t1; + +--echo # +--echo # 5. test update after varchar(10) -> char(20) +--echo # + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), + c char(10), d varchar(10), e int); + +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); + + +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); + +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); + +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); + +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); + +select * from t1; + +update t1 set d=repeat('f', 15); +select * from t1; +checksum table t1; + +drop table t1; + +--echo # +--echo # 6. test update after int -> bigint +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), + c char(10), d varchar(10), e int); + +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); + + +alter table t1 modify a char(20), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); + +alter table t1 modify b varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 16), repeat('b', 16), repeat('c', 8), repeat('d', 8), 0); + +alter table t1 modify c varchar(20), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 8), -2147483648); + +alter table t1 modify d char(20), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 16), repeat('b', 16), repeat('c', 16), repeat('d', 16), 1023); + +select * from t1; + +update t1 set e=-1; +select * from t1; +checksum table t1; + +drop table t1; + +--echo # +--echo # 7. test modify small lenght(<128) to big lengh( > 128) +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(10), b varchar(10), + c char(10), d varchar(10), e int); + +INSERT INTO t1 VALUES(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); + + +alter table t1 modify a char(251), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 8), repeat('c', 8), repeat('d', 8), -1); + +alter table t1 modify b varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 8), repeat('d', 8), 0); + +alter table t1 modify c varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 8), -2147483648); + +alter table t1 modify d char(251), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); + +select * from t1; + +update t1 set e=e+1; +select * from t1; +checksum table t1; + +drop table t1; + + +--echo # +--echo # 8. test modify big lenght(<128) to big lengh( > 128) +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), + c char(150), d varchar(150), e int); + +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); + + +alter table t1 modify a char(251), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); + +alter table t1 modify b varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); + +alter table t1 modify c varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); + +alter table t1 modify d char(251), algorithm=instant; +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); + +select * from t1; + +update t1 set e=e+1; +select * from t1; +checksum table t1; + +drop table t1; + +--echo # +--echo # 9. test modify multiple columns +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), + c char(150), d varchar(150), e int); + +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); + + +alter table t1 modify a char(251), modify b varchar(251), algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); + +alter table t1 modify c varchar(251), modify d char(251), algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); + +select * from t1; + +update t1 set e=e+1; +select * from t1; +checksum table t1; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +drop table t1; + +--echo # +--echo # 10. test charset latin1 +--echo # + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), + c char(150), d varchar(150), e int) DEFAULT CHARACTER SET latin1; + +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); + + +alter table t1 modify a char(251), modify b varchar(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); + +alter table t1 modify c varchar(251), modify d char(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); + +select * from t1; + +update t1 set e=e+1; +select * from t1; +checksum table t1; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +drop table t1; + +--echo # +--echo # 11. test charset utf8 +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), + c char(150), d varchar(150), e int) DEFAULT CHARACTER SET utf8; + +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); + + +alter table t1 modify a char(251), modify b varchar(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); + +alter table t1 modify c varchar(251), modify d char(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); + +select * from t1; + +update t1 set e=e+1; +select * from t1; +checksum table t1; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +drop table t1; + +--echo # +--echo # 12. test charset utf8mb4 +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), + c char(150), d varchar(150), e int) DEFAULT CHARACTER SET utf8mb4; + +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); + + +alter table t1 modify a char(251), modify b varchar(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); + +alter table t1 modify c varchar(251), modify d char(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); + +select * from t1; + +update t1 set e=e+1; +select * from t1; +update t1 set d='xx'; +checksum table t1; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +drop table t1; + +--echo # +--echo # 13. test partition table +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a char(150), b varchar(150), + c char(150), d varchar(150), e int) DEFAULT CHARACTER SET utf8mb4 + PARTITION BY HASH(id) PARTITIONS 3; + +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); + + +alter table t1 modify a char(251), modify b varchar(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); + +alter table t1 modify c varchar(251), modify d char(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); + +select * from t1; + +update t1 set e=e+1; +select * from t1; +update t1 set d='xx'; +checksum table t1; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +drop table t1; + +--echo # +--echo # 14. test not support temporary table +--echo # +create temporary table t1 (id int not null auto_increment primary key, + a char(10), + b varchar(10), + c char(10), + d varchar(10), e int) default character set utf8; +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +--error 1845 +alter table t1 modify a char(20), algorithm=instant; +alter table t1 modify a char(20); +select * from t1; +alter table t1 modify d char(20); +select * from t1; +select count(*) from information_schema.innodb_instant_modified_cols; + +insert into t1 values(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 16), 10000); + +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +checksum table t1; + +drop table t1; + + + +--echo # +--echo # 15. test 中文 +--echo # +create table t1 (id int not null auto_increment primary key, + a char(10), + b varchar(10), + c char(10), + d varchar(10), e int) default character set utf8; +insert into t1 values(1, '中文', '武汉', '上海', '杭州', 10000); +alter table t1 modify a char(20), algorithm=instant; +select * from t1; +alter table t1 modify d char(20), algorithm=instant; +select * from t1; +select count(*) from information_schema.innodb_instant_modified_cols; + +insert into t1 values(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 16), 10000); + +alter table t1 add f varchar(251), algorithm=instant; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +update t1 set d=repeat('你好', 2); + +checksum table t1; + +drop table t1; + + + +--echo # +--echo # 16. test binary/varbinary - latin1 +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a binary(150), b varbinary(150), + c binary(150), d varbinary(150), e int) DEFAULT CHARACTER SET latin1; + +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); + + +alter table t1 modify a binary(251), modify b varbinary(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); + +alter table t1 modify c varbinary(251), modify d binary(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); + +select * from t1; + +update t1 set e=e+1; +select * from t1; +update t1 set d='xx'; +checksum table t1; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +drop table t1; + +--echo # +--echo # 17. test binary/varbinary - utf8mb4 +--echo # + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a binary(150), b varbinary(150), + c binary(150), d varbinary(150), e int) DEFAULT CHARACTER SET utf8mb4; + +INSERT INTO t1 VALUES(1, repeat('a', 130), repeat('b', 130), repeat('c', 130), repeat('d', 130), 10000); + + +alter table t1 modify a binary(251), modify b varbinary(251), +algorithm=instant; +INSERT INTO t1 VALUES(2, repeat('a', 200), repeat('b', 130), repeat('c', 130), repeat('d', 130), -1); +INSERT INTO t1 VALUES(3, repeat('a', 200), repeat('b', 200), repeat('c', 130), repeat('d', 130), 0); + +alter table t1 modify c varbinary(251), modify d binary(251), +algorithm=instant; +INSERT INTO t1 VALUES(4, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 130), -2147483648); +INSERT INTO t1 VALUES(5, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 2147483647); + +alter table t1 modify e bigint, algorithm=instant; +INSERT INTO t1 VALUES(6, repeat('a', 200), repeat('b', 200), repeat('c', 200), repeat('d', 200), 1023); + +select * from t1; + +update t1 set e=e+1; +select * from t1; +update t1 set d='xx'; +checksum table t1; +select pos, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +drop table t1; + + +--echo # +--echo # 18. test binary/varbinary +--echo # + +create table t1 (id int not null auto_increment primary key, + a binary(10), + b varbinary(10), + c binary(10), + d varbinary(10), e int) default character set utf8; +insert into t1 values(1, repeat('a', 8), repeat('b', 8), repeat('c', 8), repeat('d', 8), 10000); +select * from t1; +alter table t1 modify a binary(20), algorithm=instant; +select * from t1; +alter table t1 modify b binary(20), algorithm=instant; +select * from t1; +update t1 set d='ab'; +select * from t1; +select count(*) from information_schema.innodb_instant_modified_cols; +alter table t1 modify c varbinary(20), algorithm=instant; +alter table t1 modify d varbinary(20), algorithm=instant; + +insert into t1 values(2, repeat('a', 16), repeat('b', 8), repeat('c', 8), repeat('d', 16), 10000); +select * from t1; + + +checksum table t1; + +drop table t1; + + + +--echo # +--echo # 19. test smallint/tinyint/mediumint +--echo # + +create table t1 (id int not null auto_increment primary key, + a TINYINT, + b smallint, + c mediumint, + d int(3), + e bigint, f varchar(10)) default character set utf8; +insert into t1 values(1, 1, 1, 1, 1, 1, 'a'); +insert into t1 values(2, -1, -1, -1, -1, -1,'b'); +select * from t1; +alter table t1 modify a int(20), algorithm=instant; +alter table t1 modify b int(20), algorithm=instant; +alter table t1 modify c int(20), algorithm=instant; +alter table t1 modify d int(20), algorithm=instant; +select * from t1; +update t1 set f='ab'; +select * from t1; +checksum table t1; +select count(*) from information_schema.innodb_instant_modified_cols; +drop table t1; + + +create table t1 (id int not null auto_increment primary key, + a TINYINT, + b smallint, + c mediumint, + d int(3), + e bigint, f varchar(10)) default character set utf8; +insert into t1 values(1, 127, 32767, 8388607, 2147483647, 2147483648, 'a'); +insert into t1 values(2, -1, -1, -1, -1, -1,'b'); +select * from t1; +alter table t1 modify a bigint, algorithm=instant; +alter table t1 modify b bigint, algorithm=instant; +alter table t1 modify c bigint, algorithm=instant; +alter table t1 modify d bigint, algorithm=instant; +select * from t1; +update t1 set f='ab'; +select * from t1; +checksum table t1; +select count(*) from information_schema.innodb_instant_modified_cols; + +drop table t1; + + +create table t1 (id int not null auto_increment primary key, + a TINYINT, + b smallint, + c mediumint, + d int(3), + e bigint, f varchar(10)) default character set utf8; +insert into t1 values(1, 127, 32767, 8388607, 2147483647, 2147483648, 'a'); +insert into t1 values(2, -1, -1, -1, -1, -1,'b'); +select * from t1; +alter table t1 modify a smallint, algorithm=instant; +alter table t1 modify b mediumint, algorithm=instant; +alter table t1 modify c int, algorithm=instant; +alter table t1 modify d bigint, algorithm=instant; +select * from t1; +update t1 set f='ab'; +select * from t1; +checksum table t1; +select count(*) from information_schema.innodb_instant_modified_cols; + +drop table t1; + + +create table t1 (id int not null auto_increment primary key, + a TINYINT unsigned, + b smallint unsigned, + c mediumint unsigned, + d int(3) unsigned, + e bigint, f varchar(10)) default character set utf8; +insert into t1 values(1, 127, 32767, 8388607, 2147483647, 2147483648, 'a'); +insert into t1 values(2, 1, 1, 1, 1, 1,'b'); +select * from t1; +alter table t1 modify a smallint unsigned, algorithm=instant; +alter table t1 modify b mediumint unsigned, algorithm=instant; +alter table t1 modify c int unsigned, algorithm=instant; +alter table t1 modify d bigint unsigned, algorithm=instant; +select * from t1; +update t1 set f='ab'; +select * from t1; +checksum table t1; +select count(*) from information_schema.innodb_instant_modified_cols; + +drop table t1; + + + + +--echo # +--echo # 20. test rollback +--echo # + +# test update +create table t1 (id int not null auto_increment primary key, + a binary(10), + b varbinary(10)); +insert into t1 values(1, repeat('a', 8), repeat('b', 8)); +alter table t1 modify a binary(20), algorithm=instant; +select * from t1; +alter table t1 modify b binary(20), algorithm=instant; +select * from t1; + +begin; +update t1 set a='ab'; +select * from t1; +rollback; +select * from t1; + +begin; +update t1 set b='cd'; +select * from t1; +rollback; +select * from t1; +select count(*) from information_schema.innodb_instant_modified_cols; +let $checksum_v1 = query_get_value(checksum table t1, Checksum, 1); +optimize table t1; +let $checksum_v2 = query_get_value(checksum table t1, Checksum, 1); +--let $assert_text= 'checksum matched' +--let $assert_cond= $checksum_v2 = $checksum_v1 +--source include/assert.inc +drop table t1; + +# test update +create table t1 (id int not null auto_increment primary key, + a char(10), + b varchar(10), + c int); +insert into t1 values(1, repeat('a', 8), repeat('b', 8), -1); + +alter table t1 modify a char(20), + modify b varchar(20), + modify c bigint(20), algorithm=instant; +select * from t1; + +begin; +update t1 set a='ab', b='cd', c=100; +select * from t1; +rollback; +select * from t1; + +insert into t1 values(2, repeat('a', 8), repeat('b', 8), 2); +select * from t1; + + +select count(*) from information_schema.innodb_instant_modified_cols; +checksum table t1; +drop table t1; + +# test delete +create table t1 (id int not null auto_increment primary key, + a char(10), + b varchar(10), + c int); +insert into t1 values(1, repeat('a', 8), repeat('b', 8), -1); + +alter table t1 modify a char(20), + modify b varchar(20), + modify c bigint(20), algorithm=instant; +select * from t1; + +begin; +delete from t1; +select * from t1; +rollback; +select * from t1; + +begin; +insert into t1 values(2, repeat('a', 8), repeat('b', 8), 2); +select * from t1; +rollback; +select * from t1; + +insert into t1 values(2, repeat('a', 8), repeat('b', 8), 2); +select * from t1; + +select count(*) from information_schema.innodb_instant_modified_cols; +checksum table t1; +drop table t1; + + + +--echo # +--echo # 21. test external data +--echo # + +create table t1 (id int not null auto_increment primary key, + a char(10), + b varchar(1024), + c int); +insert into t1 values(1, repeat('a', 8), repeat('b', 800), -1); + +alter table t1 modify a char(20), + modify b varchar(2048), + modify c bigint, algorithm=instant; +select * from t1; + +update t1 set a=repeat('a', 16); + +select * from t1; + +begin; +update t1 set a='ab', b='cd', c=100; +select * from t1; +rollback; +select * from t1; + +insert into t1 values(2, repeat('a', 8), repeat('b', 8), 2); +select * from t1; + + +select count(*) from information_schema.innodb_instant_modified_cols; +checksum table t1; +drop table t1; + + +--echo # +--echo # 21. test support modify default value +--echo # + +create table t1 (id int not null auto_increment primary key, a char(150) default 'a', b varchar(150)); +insert into t1 values(1, repeat('a', 130), repeat('b', 130)); +alter table t1 modify a char(251), algorithm=instant; +show create table t1; +insert into t1(id,b) values(2, 'b'); +alter table t1 modify b char(251) default 'abc', algorithm=instant; +show create table t1; +insert into t1(id,a) values(3, null); +select count(*) from information_schema.innodb_instant_modified_cols; +checksum table t1; +drop table t1; + +--echo # +--echo # 22. test support modify partition table with update +--echo # + +CREATE TABLE client_firms ( + id INT, + name VARCHAR(35), + part binary(10), + pos INT +) +PARTITION BY LIST (id) ( + PARTITION r0 VALUES IN (1, 5, 9, 13, 17, 21), + PARTITION r1 VALUES IN (2, 6, 10, 14, 18, 22), + PARTITION r2 VALUES IN (3, 7, 11, 15, 19, 23), + PARTITION r3 VALUES IN (4, 8, 12, 16, 20, 24) +); + +--disable_warnings +insert into client_firms +values(1,'a',1, 2),(2,'a',1, 3),(3,'bbb',2, 4),(4,'jak',2, +5),(5,'jone',343, 6); +select id, name, cast(part as unsigned), pos from client_firms order by id; +alter table client_firms modify id bigint ,algorithm=instant; +update client_firms set name = "ccc" where id = 3; +select id, name, cast(part as unsigned), pos from client_firms order by id; +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +checksum table client_firms; +alter table client_firms modify name varchar(60) ,algorithm=instant; +update client_firms set name = "jak4" where id = 4; +select id, name, cast(part as unsigned), pos from client_firms order by id; +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +alter table client_firms modify part varbinary(12) ,algorithm=instant; +select id, name, cast(part as unsigned), pos from client_firms order by id; +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +checksum table client_firms; +insert into client_firms values(6,'jek',44, 8),(7,'jane',343, 9); +update client_firms set name = "aaa" where id = 2; +select id, name, cast(part as unsigned), pos from client_firms order by id; +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +checksum table client_firms; +alter table client_firms modify pos bigint ,algorithm=instant; +insert into client_firms values(8,'jek8',55, 10),(9,'jane9',66, 11); +select id, name, cast(part as unsigned), pos from client_firms order by id; +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +checksum table client_firms; +--enable_warnings + +drop table client_firms; + +--echo # +--echo # 23. test support modify table with truncate +--echo # + + +create table t1 (id int not null auto_increment primary key, a char(150), b varchar(150), c int); +insert into t1 values(1, repeat('a', 130), repeat('b', 130), 100); +select * from t1 order by id; +alter table t1 modify a char(251), algorithm=instant; +select * from t1 order by id; +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +show create table t1; +alter table t1 modify c bigint, algorithm=instant; +select * from t1 order by id; +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +show create table t1; +insert into t1(id,b) values(2, 'b'); +select * from t1 order by id; +truncate table t1; +insert into t1 values(3, 'aboc', 'bbb', 10000); +select * from t1 order by id; +alter table t1 modify b char(251) default 'abc', algorithm=instant; +select * from t1 order by id; +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +show create table t1; +select name, pos, version, mtype, prtype, len +from information_schema.innodb_instant_modified_cols order by name; +drop table t1; + +--echo # +--echo # 24. test rollback update +--echo # + +CREATE TABLE `t13` (id int primary key, value blob, c int); + +select ROW_FORMAT,DATA_LENGTH from information_schema.TABLES where table_name like "t13"; + +insert into t13 values(1, repeat('A', 8092), 1); + +alter table t13 modify c bigint, ALGORITHM = INSTANT; + +begin; + +update t13 set value = repeat('E', 8101) where id = 1; + +# should be crash if bug not fixed +rollback; + +select * from t13; +check table t13; + +begin; + +update t13 set value = repeat('E', 8101) where id = 1; + +# should be crash if bug not fixed +rollback; + +select * from t13; +check table t13; + +update t13 set value = repeat('E', 8101) where id = 1; +select * from t13; +check table t13; + +drop table t13; + +--echo # +--echo # 25. test add/truncate partition +--echo # + +CREATE TABLE `t1` ( + `id` int NOT NULL, + `c1_char` char(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT 'abc', + `c2_varchar` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `c3_binary` binary(10) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 +/*!50100 PARTITION BY RANGE (`id`) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = InnoDB, + PARTITION p1 VALUES LESS THAN (200) ENGINE = InnoDB, + PARTITION p2 VALUES LESS THAN (1500) ENGINE = InnoDB) */; + +INSERT INTO `t1` VALUES (1,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'),(2,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'),(3,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'); + +insert into t1 values (192,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'); + +alter table t1 modify c1_char char(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT 'abc', modify id bigint not null,algorithm=instant; + +alter table t1 add partition (partition p3 values less than (2000)); +insert into t1 values (1998,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'); +select * from t1; + +alter table t1 reorganize partition p0 into (partition p4 values less than (50), partition p5 values less than (100)); + +select * from t1; + +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +--source include/restart_mysqld.inc + +select * from test.t1; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +alter table t1 truncate partition p4; +select * from t1; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +INSERT INTO `t1` VALUES (1,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'),(2,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'),(3,'SSSSSSSSSS','aaaaaaaaaa','iiiiiiiiii'); +select * from t1; + +truncate table t1; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +--source include/restart_mysqld.inc +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +alter table t1 modify c1_char char(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT 'abc', algorithm=instant; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +alter table t1 drop partition p5; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; +alter table t1 truncate partition p1,p2,p3,p4; +select name, pos, version, mtype, prtype, len from information_schema.innodb_instant_modified_cols; + +drop table t1; diff --git a/share/messages_to_clients.txt b/share/messages_to_clients.txt index 9064cb4041e..774e9d3aa40 100644 --- a/share/messages_to_clients.txt +++ b/share/messages_to_clients.txt @@ -9953,6 +9953,9 @@ ER_INSTALL_COMPONENT_SET_UNUSED_VALUE ER_WARN_DEPRECATED_USER_DEFINED_COLLATIONS eng "'%s' is a user defined collation. User defined collations are deprecated and will be removed in a future release. Consider using a compiled collation instead." +ER_INNODB_INSTANT_MODIFY_NOT_SUPPORTED_MAX_SIZE + eng "Column can't be modified with ALGORITHM=INSTANT as either max possible row size already crosses max permissible row size or may cross it after modify. Try ALGORITHM=INPLACE/COPY." + # # End of 8.0 error messages (server-to-client). # Do NOT add messages intended for the error log above! diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 872f061e209..06871368df0 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -172,6 +172,7 @@ SET(DD_SOURCES dd/impl/system_views/innodb_foreign.cc dd/impl/system_views/innodb_foreign_cols.cc dd/impl/system_views/innodb_fields.cc + dd/impl/system_views/innodb_instant_modified_cols.cc dd/impl/system_views/innodb_tablespaces_brief.cc dd/impl/system_views/key_column_usage.cc dd/impl/system_views/keywords.cc diff --git a/sql/dd/impl/system_registry.cc b/sql/dd/impl/system_registry.cc index df389f22337..3cd91bd1198 100644 --- a/sql/dd/impl/system_registry.cc +++ b/sql/dd/impl/system_registry.cc @@ -64,6 +64,7 @@ #include "sql/dd/impl/system_views/view_table_usage.h" // View_table_usage #include "sql/dd/impl/system_views/views.h" // Views +#include "sql/dd/impl/system_views/innodb_instant_modified_cols.h" // Innodb_instant_modified_cols #include "sql/dd/impl/system_views/table_constraints_extensions.h" // Table_constraints_extensions #include "sql/dd/impl/system_views/tables_extensions.h" // Tables_extensions #include "sql/dd/impl/system_views/tablespaces_extensions.h" // Tablespaces_extensions @@ -307,6 +308,7 @@ void System_views::init() { register_view(is); register_view(is); register_view(non_dd_based_is); + register_view(is); } } // namespace dd diff --git a/sql/dd/impl/system_views/innodb_instant_modified_cols.cc b/sql/dd/impl/system_views/innodb_instant_modified_cols.cc new file mode 100644 index 00000000000..5a7e2a259a6 --- /dev/null +++ b/sql/dd/impl/system_views/innodb_instant_modified_cols.cc @@ -0,0 +1,64 @@ +/***************************************************************************** + +Copyright (c) 1996, 2023, Oracle and/or its affiliates. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License, version 2.0, as published by the +Free Software Foundation. + +This program is also distributed with certain software (including but not +limited to OpenSSL) that is licensed under separate terms, as designated in a +particular file or component or in included license documentation. The authors +of MySQL hereby grant you an additional permission to link the program and +your derivative works with the separately licensed software that they have +included with MySQL. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, +for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*****************************************************************************/ + +#include "sql/dd/impl/system_views/innodb_instant_modified_cols.h" + +namespace dd { +namespace system_views { + +const Innodb_instant_modified_cols &Innodb_instant_modified_cols::instance() { + static Innodb_instant_modified_cols *s_instance = + new Innodb_instant_modified_cols(); + return *s_instance; +} + +Innodb_instant_modified_cols::Innodb_instant_modified_cols() { + m_target_def.set_view_name(view_name()); + + m_target_def.add_field(FIELD_TABLE_ID, "TABLE_ID", + "CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, " + "'table_id'),char(100) character set utf8mb4)"); + m_target_def.add_field(FIELD_NAME, "NAME", "name"); + m_target_def.add_field(FIELD_POS, "POS", "ordinal_position"); + m_target_def.add_field(FIELD_VERSION, "VERSION", + "CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, " + "'version'),char(100) character set utf8mb4)"); + m_target_def.add_field(FIELD_MTYPE, "MTYPE", + "CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, " + "'mtype'),char(100) character set utf8mb4)"); + m_target_def.add_field(FIELD_PRTYPE, "PRTYPE", + "CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, " + "'prtype'),char(100) character set utf8mb4)"); + m_target_def.add_field(FIELD_LEN, "LEN", + "CONVERT(GET_DD_COLUMN_PRIVATE_DATA(se_private_data, " + "'len'),char(100) character set utf8mb4)"); + + m_target_def.add_from("mysql.columns"); + + m_target_def.add_where("instr(se_private_data, 'modified_version') <> 0"); +} +} // namespace system_views +} // namespace dd diff --git a/sql/dd/impl/system_views/innodb_instant_modified_cols.h b/sql/dd/impl/system_views/innodb_instant_modified_cols.h new file mode 100644 index 00000000000..ad99c075d60 --- /dev/null +++ b/sql/dd/impl/system_views/innodb_instant_modified_cols.h @@ -0,0 +1,70 @@ +/***************************************************************************** + +Copyright (c) 1996, 2023, Oracle and/or its affiliates. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License, version 2.0, as published by the +Free Software Foundation. + +This program is also distributed with certain software (including but not +limited to OpenSSL) that is licensed under separate terms, as designated in a +particular file or component or in included license documentation. The authors +of MySQL hereby grant you an additional permission to link the program and +your derivative works with the separately licensed software that they have +included with MySQL. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, +for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*****************************************************************************/ + +#ifndef DD_SYSTEM_VIEWS__INNODB_INSTANT_MODIFIED_COLS_INCLUDED +#define DD_SYSTEM_VIEWS__INNODB_INSTANT_MODIFIED_COLS_INCLUDED + +#include "sql/dd/impl/system_views/system_view_definition_impl.h" +#include "sql/dd/impl/system_views/system_view_impl.h" + +namespace dd { +namespace system_views { + +/* + The class representing INFORMATION_SCHEMA.INNODB_INSTANT_MODIFIED_COLS system + view definition +*/ +class Innodb_instant_modified_cols + : public System_view_impl { + public: + enum enum_fields { + FIELD_TABLE_ID, + FIELD_NAME, + FIELD_POS, + FIELD_VERSION, + FIELD_MTYPE, + FIELD_PRTYPE, + FIELD_LEN + }; + + Innodb_instant_modified_cols(); + + static const Innodb_instant_modified_cols &instance(); + + static const String_type &view_name() { + static String_type s_view_name("INNODB_INSTANT_MODIFIED_COLS"); + return s_view_name; + } + + const String_type &name() const override { + return Innodb_instant_modified_cols::view_name(); + } +}; + +} // namespace system_views +} // namespace dd + +#endif // DD_SYSTEM_VIEWS__INNODB_INSTANT_MODIFIED_COLS_INCLUDED diff --git a/sql/item_create.cc b/sql/item_create.cc index fb3ad92c572..5a1a3ab8404 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -1785,7 +1785,10 @@ static const std::pair func_array[] = { {"INTERNAL_IS_MANDATORY_ROLE", SQL_FN_INTERNAL(Item_func_internal_is_mandatory_role, 2)}, {"INTERNAL_IS_ENABLED_ROLE", - SQL_FN_INTERNAL(Item_func_internal_is_enabled_role, 2)}}; + SQL_FN_INTERNAL(Item_func_internal_is_enabled_role, 2)}, + {"GET_DD_COLUMN_PRIVATE_DATA", + SQL_FN_INTERNAL(Item_func_get_dd_column_private_data, 2)}, +}; using Native_functions_hash = std::unordered_map; static const Native_functions_hash *native_functions_hash; diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index d79b610623c..a42b873bdda 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -5499,3 +5499,75 @@ String *Item_func_internal_get_dd_column_extra::val_str(String *str) { return str; } + +/** + @brief + This function prepares string representing se_private_data for columns. + This is required for IS implementation which uses views on DD columns. + Syntax: + string get_dd_column_private_data(dd.columns.se_private_data) + The arguments accept values from se_private_data from 'columns' + DD table. + */ +String *Item_func_get_dd_column_private_data::val_str(String *str) { + DBUG_TRACE; + // Read columns.se_private_data + String option; + String *option_ptr; + std::ostringstream oss(""); + if ((option_ptr = args[0]->val_str(&option)) == nullptr) { + str->copy(oss.str().c_str(), oss.str().length(), system_charset_info); + return str; + } + // Read required values from properties + std::unique_ptr p( + dd::Properties::parse_properties(option_ptr->c_ptr_safe())); + // Warn if the property string is corrupt. + if (!p.get()) { + LogErr(WARNING_LEVEL, ER_WARN_PROPERTY_STRING_PARSE_FAILED, + option_ptr->c_ptr_safe()); + assert(false); + str->copy(oss.str().c_str(), oss.str().length(), system_charset_info); + return str; + } + // Read items. + uint opt_value = 0; + char option_buff[350], *ptr; + ptr = option_buff; + if (strcmp(args[1]->val_str(&option)->ptr(), "table_id") == 0) { + if (p->exists("table_id")) { + p->get("table_id", &opt_value); + ptr = longlong10_to_str(opt_value, ptr, 10); + } + } + if (strcmp(args[1]->val_str(&option)->ptr(), "version") == 0) { + if (p->exists("modified_version")) { + p->get("modified_version", &opt_value); + ptr = longlong10_to_str(opt_value, ptr, 10); + } + } + if (strcmp(args[1]->val_str(&option)->ptr(), "mtype") == 0) { + if (p->exists("modified_mtype")) { + p->get("modified_mtype", &opt_value); + ptr = longlong10_to_str(opt_value, ptr, 10); + } + } + if (strcmp(args[1]->val_str(&option)->ptr(), "prtype") == 0) { + if (p->exists("modified_prtype")) { + p->get("modified_prtype", &opt_value); + ptr = longlong10_to_str(opt_value, ptr, 10); + } + } + if (strcmp(args[1]->val_str(&option)->ptr(), "len") == 0) { + if (p->exists("modified_len")) { + p->get("modified_len", &opt_value); + ptr = longlong10_to_str(opt_value, ptr, 10); + } + } + if (ptr == option_buff) + oss << ""; + else + oss << option_buff; + str->copy(oss.str().c_str(), oss.str().length(), system_charset_info); + return str; +} diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index a29f76acabb..ba947bd6f3e 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -1771,4 +1771,27 @@ class Item_func_internal_get_dd_column_extra final : public Item_str_func { String *val_str(String *) override; }; +class Item_func_get_dd_column_private_data final : public Item_str_func { + public: + Item_func_get_dd_column_private_data(const POS &pos, Item *a, Item *b) + : Item_str_func(pos, a, b) {} + + enum Functype functype() const override { return DD_INTERNAL_FUNC; } + bool resolve_type(THD *) override { + /* maximum string length of the property value is expected + to be less than 256 characters. */ + set_data_type_string(256U); + set_nullable(false); + null_on_null = false; + + return false; + } + + const char *func_name() const override { + return "get_dd_column_private_data"; + } + + String *val_str(String *) override; +}; + #endif /* ITEM_STRFUNC_INCLUDED */ diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index e0d451d7af7..d91f96b6702 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -3886,11 +3886,34 @@ bool btr_index_rec_validate(const rec_t *rec, /*!< in: index record */ offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, UT_LOCATION_HERE, &heap); + uint8_t rec_version = 0; + const bool has_instant_modified_cols = index->has_instant_modified_cols(); + if (has_instant_modified_cols) { + rec_version = rec_new_get_row_version(rec); + } for (i = 0; i < n; i++) { dict_field_t *field = nullptr; field = index->get_physical_field(i); const dict_col_t *col = field->col; + dict_col_t old_col; + dict_field_t old_field; + if (has_instant_modified_cols && col->is_modified_after(rec_version)) { + /* this col is in old version */ + old_col.mtype = col->old_mtype; + old_col.prtype = col->old_prtype; + old_col.mbminmaxlen = col->old_mbminmaxlen; + old_col.len = col->old_len; + col = &old_col; + + old_field.prefix_len = field->prefix_len; + old_field.fixed_len = + static_cast(col->get_fixed_size(page_is_comp(page))); + if (old_field.fixed_len > DICT_MAX_FIXED_COL_LEN) { + old_field.fixed_len = 0; + } + field = &old_field; + } ulint fixed_size = col->get_fixed_size(page_is_comp(page)); /* nullptr for index as i is physical here */ diff --git a/storage/innobase/ddl/ddl0fts.cc b/storage/innobase/ddl/ddl0fts.cc index 84b33037cd7..051f3e29b89 100644 --- a/storage/innobase/ddl/ddl0fts.cc +++ b/storage/innobase/ddl/ddl0fts.cc @@ -462,6 +462,7 @@ dict_index_t *FTS::create_index(dict_index_t *index, dict_table_t *table, field->col->mtype = (charset == &my_charset_latin1) ? DATA_VARCHAR : DATA_VARMYSQL; + field->col->old_mtype = DATA_MTYPE_MAX; field->col->prtype = idx_field->col->prtype | DATA_NOT_NULL; field->col->mbminmaxlen = idx_field->col->mbminmaxlen; @@ -480,6 +481,7 @@ dict_index_t *FTS::create_index(dict_index_t *index, dict_table_t *table, mem_heap_alloc(new_index->heap, sizeof(dict_col_t))); field->col->mtype = DATA_INT; + field->col->old_mtype = DATA_MTYPE_MAX; *doc_id_32_bit = false; /* Check whether we can use 4 bytes instead of 8 bytes integer @@ -527,6 +529,7 @@ dict_index_t *FTS::create_index(dict_index_t *index, dict_table_t *table, mem_heap_alloc(new_index->heap, sizeof(dict_col_t))); field->col->mtype = DATA_INT; + field->col->old_mtype = DATA_MTYPE_MAX; field->col->len = 4; field->fixed_len = 4; field->col->prtype = DATA_NOT_NULL; diff --git a/storage/innobase/dict/dict0dd.cc b/storage/innobase/dict/dict0dd.cc index 67bc2be0aab..a86a5664fb2 100644 --- a/storage/innobase/dict/dict0dd.cc +++ b/storage/innobase/dict/dict0dd.cc @@ -1756,6 +1756,11 @@ dberr_t dd_clear_instant_table(dd::Table &dd_table, bool clear_version) { fn(dd_column_key_strings[DD_INSTANT_COLUMN_DEFAULT_NULL]); fn(dd_column_key_strings[DD_INSTANT_COLUMN_DEFAULT]); } else { + fn(dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED]); + fn(dd_column_key_strings[DD_INSTANT_COLUMN_MTYPE]); + fn(dd_column_key_strings[DD_INSTANT_COLUMN_PRTYPE]); + fn(dd_column_key_strings[DD_INSTANT_COLUMN_LEN]); + /* Possibly an INSTANT ADD/DROP column with a version */ if (dd_column_is_dropped(col)) { cols_to_drop.push_back(col->name().c_str()); @@ -2571,6 +2576,18 @@ void dd_write_table(dd::Object_id dd_space_id, Table *dd_table, dd_column->se_private_data().set( s, (uint32_t)col->get_version_dropped()); } + + if (col->is_instant_modified()) { + s = dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED]; + dd_column->se_private_data().set( + s, (uint32_t)col->get_version_modified()); + s = dd_column_key_strings[DD_INSTANT_COLUMN_MTYPE]; + dd_column->se_private_data().set(s, (uint32_t)col->old_mtype); + s = dd_column_key_strings[DD_INSTANT_COLUMN_PRTYPE]; + dd_column->se_private_data().set(s, (uint32_t)col->old_prtype); + s = dd_column_key_strings[DD_INSTANT_COLUMN_LEN]; + dd_column->se_private_data().set(s, (uint32_t)col->old_len); + } } else { /* Table has instant col added/dropped. Each column shall have physical pos updated. */ @@ -3499,6 +3516,35 @@ static inline void fill_dict_existing_column( dict_mem_table_add_col(m_table, heap, field->field_name, mtype, prtype, col_len, !field->is_hidden_by_system(), phy_pos, (uint8_t)v_added, UINT8_UNDEFINED); + + if (dd_column_is_modified(column)) { + const dd::Properties &p = column->se_private_data(); + uint32_t modified_version; + uint32_t old_prtype; + uint32_t old_mtype; + uint32_t old_len; + ulint mbminlen; + ulint mbmaxlen; + p.get(dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED], + &modified_version); + p.get(dd_column_key_strings[DD_INSTANT_COLUMN_MTYPE], + &old_mtype); + p.get(dd_column_key_strings[DD_INSTANT_COLUMN_PRTYPE], + &old_prtype); + p.get(dd_column_key_strings[DD_INSTANT_COLUMN_LEN], &old_len); + dict_col_t *col = m_table->get_col(m_table->n_def - 1); + ut_ad(strcmp(field->field_name, + m_table->get_col_name(dict_col_get_no(col))) == 0); + col->modified_version = modified_version; + col->old_mtype = old_mtype; + col->old_prtype = old_prtype; + col->old_len = old_len; + dtype_get_mblen(col->old_mtype, col->old_prtype, &mbminlen, &mbmaxlen); + col->old_mbminmaxlen = DATA_MBMINMAXLEN(mbminlen, mbmaxlen); +#ifdef UNIV_DEBUG + crv = std::max(modified_version, crv); +#endif + } } else { dict_mem_table_add_v_col(m_table, heap, field->field_name, mtype, prtype, col_len, pos, @@ -3755,8 +3801,9 @@ static inline dict_table_t *dd_fill_dict_table(const Table *dd_tab, uint32_t c_c = 0; uint32_t t_c = 0; uint32_t c_r_v = 0; + uint32_t m_c = 0; - dd_table_get_column_counters(dd_tab->table(), i_c, c_c, t_c, c_r_v); + dd_table_get_column_counters(dd_tab->table(), i_c, c_c, t_c, c_r_v, m_c); /* Create the dict_table_t */ dict_table_t *m_table = dict_mem_table_create(norm_name, 0, n_cols, n_v_cols, n_m_v_cols, 0, 0, t_c - c_c); @@ -3766,6 +3813,7 @@ static inline dict_table_t *dd_fill_dict_table(const Table *dd_tab, m_table->current_col_count = c_c; m_table->total_col_count = t_c; m_table->current_row_version = c_r_v; + m_table->instant_modified_cols_cnt = m_c; /* Set up the field in the newly allocated dict_table_t */ m_table->id = dd_tab->se_private_id(); @@ -7716,4 +7764,104 @@ void rebuild(std::string &dict_name) { } } // namespace dict_name + +/** Set column information (datatype, length) for instantly modified columns +@param[in] old_table MySQL table as it is before the ALTER operation +@param[in] altered_table MySQL table that is being altered +@param[in,out] new_dd_table New dd::Table +@param[in] new_table New InnoDB table object */ +void dd_modify_instant_columns(const TABLE *old_table, + const TABLE *altered_table, + dd::Table *new_dd_table, + const dict_table_t *new_table, + const Columns &cols_to_modify) { + + ut_d(int num_modified_cols = 0); + ut_ad(cols_to_modify.size() > 0 && cols_to_modify.size() % 2 == 0); + for (uint32_t i = 0; i < cols_to_modify.size(); i += 2) { + const Field *old_field = cols_to_modify[i]; + const Field *new_field = cols_to_modify[i + 1]; + ut_ad(!innobase_is_v_fld(old_field)); + ut_ad(!innobase_is_v_fld(new_field)); + ut_ad(old_field->real_type() != new_field->real_type() || + old_field->pack_length() != new_field->pack_length()); + dd::Column *column = const_cast( + dd_find_column(new_dd_table, new_field->field_name)); + ut_ad(column != nullptr); + dd::Properties &se_private = column->se_private_data(); + ut_d(++num_modified_cols); + /* Get the mtype and prtype of the old field. Keep this same + with the code in dd_fill_dict_table(), except FTS check */ + ulint prtype = 0; + unsigned col_len = old_field->pack_length(); + ulint nulls_allowed; + ulint unsigned_type; + ulint binary_type; + ulint long_true_varchar; + ulint charset_no; + ulint mtype = get_innobase_type_from_mysql_type(&unsigned_type, old_field); + nulls_allowed = old_field->is_nullable() ? 0 : DATA_NOT_NULL; + binary_type = old_field->binary() ? DATA_BINARY_TYPE : 0; + charset_no = 0; + if (dtype_is_string_type(mtype)) { + charset_no = static_cast(old_field->charset()->number); + } + long_true_varchar = 0; + if (old_field->type() == MYSQL_TYPE_VARCHAR) { + col_len -= old_field->get_length_bytes(); + if (old_field->get_length_bytes() == 2) { + long_true_varchar = DATA_LONG_TRUE_VARCHAR; + } + } + prtype = + dtype_form_prtype((ulint)old_field->type() | nulls_allowed | + unsigned_type | binary_type | long_true_varchar, + charset_no); + se_private.set(dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED], + new_table->current_row_version + 1); + se_private.set(dd_column_key_strings[DD_INSTANT_COLUMN_MTYPE], + mtype); + se_private.set(dd_column_key_strings[DD_INSTANT_COLUMN_PRTYPE], + prtype); + se_private.set(dd_column_key_strings[DD_INSTANT_COLUMN_LEN], + col_len); + } + ut_ad(num_modified_cols > 0); +} + +bool dd_column_is_modified(const dd::Column *dd_col) { + const char *s = dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED]; + if (!dd_col->se_private_data().exists(s)) { + return false; + } +#ifdef UNIV_DEBUG + uint32_t version = UINT32_UNDEFINED; + dd_col->se_private_data().get(s, &version); + ut_ad(dd_is_valid_row_version(version)); +#endif + return true; +} + +uint32_t dd_column_get_version_modified(const dd::Column *dd_col) { + if (!dd_column_is_modified(dd_col)) { + return UINT32_UNDEFINED; + } + uint32_t version = UINT32_UNDEFINED; + dd_col->se_private_data().get( + dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED], &version); + ut_a(dd_is_valid_row_version(version)); + return (version); +} + +bool is_modified(Field *old_field, Field *new_field) { + if (innobase_is_v_fld(old_field) || innobase_is_v_fld(new_field)) { + return false; + } + if (old_field->real_type() != new_field->real_type() || + old_field->pack_length() != new_field->pack_length()) { + return true; + } + return false; +} + #endif /* !UNIV_HOTBACKUP */ diff --git a/storage/innobase/dict/dict0inst.cc b/storage/innobase/dict/dict0inst.cc index e505581df9e..327bff71f65 100644 --- a/storage/innobase/dict/dict0inst.cc +++ b/storage/innobase/dict/dict0inst.cc @@ -35,18 +35,20 @@ Created 2020-04-24 by Mayank Prasad */ static void populate_to_be_instant_columns_low( const Alter_inplace_info *ha_alter_info, const TABLE *old_table, - const TABLE *new_table, Columns &cols_to_add, Columns &cols_to_drop); + const TABLE *new_table, Columns &cols_to_add, Columns &cols_to_drop, + Columns &cols_to_modify); template bool Instant_ddl_impl::is_instant_add_drop_possible( const Alter_inplace_info *ha_alter_info, const TABLE *table, - const TABLE *altered_table, const dict_table_t *dict_table) { + const TABLE *altered_table, const dict_table_t *dict_table, int &error) { Columns cols_to_add; Columns cols_to_drop; + Columns cols_to_modify; populate_to_be_instant_columns_low(ha_alter_info, table, altered_table, - cols_to_add, cols_to_drop); + cols_to_add, cols_to_drop, cols_to_modify); - if (cols_to_add.empty() && cols_to_drop.empty()) { + if (cols_to_add.empty() && cols_to_drop.empty() && cols_to_modify.empty()) { ut_ad(0); return true; } @@ -66,39 +68,73 @@ bool Instant_ddl_impl
::is_instant_add_drop_possible( if (res) { /* Table is already in a state where possible row size can go beyond permissible size limit. Don't allow INSTANT ADD */ + error = 1; return false; } + if (!index->has_row_versions()) { + /* 1 byte for version should be considered(the table will be + added/dropped/modified instantly) */ + current_max_size += 1; + } + + auto calc_field_max_size = [](const dict_table_t *dict_table, + const dict_index_t *index, + const Field *field) -> size_t { + unsigned col_len; + ulint mtype; + ulint prtype; + get_field_types(nullptr, dict_table, field, col_len, mtype, prtype); + + /* Create a dummy dict_cot_t and dict_field_t just to calculate size */ + dict_col_t dummy_col; + dummy_col.mtype = (unsigned int)mtype; + dummy_col.prtype = (unsigned int)prtype; + dummy_col.len = (unsigned int)col_len; + ulint mbminlen; + ulint mbmaxlen; + dtype_get_mblen(mtype, prtype, &mbminlen, &mbmaxlen); + dummy_col.set_mbminmaxlen(mbminlen, mbmaxlen); + dict_field_t dummy_field; + dummy_field.col = &dummy_col; + size_t field_max_size = 0; + get_field_max_size(dict_table, index, &dummy_field, field_max_size); + return field_max_size; + }; + for (auto field : cols_to_add) { if (innobase_is_v_fld(field)) { continue; } /* Get the maximum possible size needed for this field */ - size_t field_max_size = 0; - { - unsigned col_len; - ulint mtype; - ulint prtype; - get_field_types(nullptr, dict_table, field, col_len, mtype, prtype); - - /* Create a dummy dict_cot_t and dict_field_t just to calculate size */ - dict_col_t dummy_col; - dummy_col.mtype = (unsigned int)mtype; - dummy_col.prtype = (unsigned int)prtype; - dummy_col.len = (unsigned int)col_len; - ulint mbminlen; - ulint mbmaxlen; - dtype_get_mblen(mtype, prtype, &mbminlen, &mbmaxlen); - dummy_col.set_mbminmaxlen(mbminlen, mbmaxlen); - dict_field_t dummy_field; - dummy_field.col = &dummy_col; - get_field_max_size(dict_table, index, &dummy_field, field_max_size); - } + size_t field_max_size = calc_field_max_size(dict_table, index, field); current_max_size += field_max_size; if (current_max_size > page_rec_max) { /* Don't allow INSTANT ADD */ + error = 1; + return false; + } + } + + for (auto field : cols_to_drop) { + auto col = dict_table->get_col_by_name(field->field_name); + if (col && col->is_instant_modified()) { + /* don't allow instant drop */ + error = 2; + return false; + } + } + + for (size_t i = 0; i < cols_to_modify.size(); i += 2) { + auto old_field = cols_to_modify.at(i); + auto new_field = cols_to_modify.at(i + 1); + current_max_size += calc_field_max_size(dict_table, index, new_field); + current_max_size -= calc_field_max_size(dict_table, index, old_field); + if (current_max_size > page_rec_max) { + /* Don't allow INSTANT MODIFY */ + error = 3; return false; } } @@ -108,18 +144,19 @@ bool Instant_ddl_impl
::is_instant_add_drop_possible( template bool Instant_ddl_impl::is_instant_add_drop_possible( const Alter_inplace_info *ha_alter_info, const TABLE *table, - const TABLE *altered_table, const dict_table_t *dict_table); + const TABLE *altered_table, const dict_table_t *dict_table, int &error); template bool Instant_ddl_impl::is_instant_add_drop_possible( const Alter_inplace_info *ha_alter_info, const TABLE *table, - const TABLE *altered_table, const dict_table_t *dict_table); + const TABLE *altered_table, const dict_table_t *dict_table, int &error); template bool Instant_ddl_impl
::commit_instant_add_col_low() { ut_ad(!m_dict_table->is_temporary()); + int error = 0; ut_a(is_instant_add_drop_possible(m_ha_alter_info, m_old_table, - m_altered_table, m_dict_table)); + m_altered_table, m_dict_table, error)); /* To remember old default values if exist */ dd_copy_table_columns(m_ha_alter_info, m_new_dd_tab->table(), @@ -156,8 +193,9 @@ template bool Instant_ddl_impl
::commit_instant_drop_col_low() { ut_ad(!m_dict_table->is_temporary()); + int error = 0; ut_a(is_instant_add_drop_possible(m_ha_alter_info, m_old_table, - m_altered_table, m_dict_table)); + m_altered_table, m_dict_table, error)); /* Copy columns metadata */ dd_copy_table_columns(m_ha_alter_info, m_new_dd_tab->table(), @@ -189,6 +227,24 @@ bool Instant_ddl_impl::commit_instant_drop_col() { return false; } +template bool Instant_ddl_impl::commit_instant_modify_col_low(); +template bool Instant_ddl_impl::commit_instant_modify_col_low(); + +template <> +bool Instant_ddl_impl::commit_instant_modify_column() { + if (dd_part_is_first(m_new_dd_tab)) { + if (commit_instant_modify_col_low()) { + return true; + } + } + return false; +} + +template <> +bool Instant_ddl_impl::commit_instant_modify_column() { + return commit_instant_modify_col_low(); +} + template bool Instant_ddl_impl
::commit_instant_ddl() { Instant_Type type = @@ -231,13 +287,15 @@ bool Instant_ddl_impl
::commit_instant_ddl() { row_mysql_unlock_data_dictionary(m_trx); break; case Instant_Type::INSTANT_ADD_DROP_COLUMN: + case Instant_Type::INSTANT_MODIFY_COLUMN: trx_start_if_not_started(m_trx, true, UT_LOCATION_HERE); dd_copy_private(*m_new_dd_tab, *m_old_dd_tab); /* Fetch the columns which are to be added or dropped */ populate_to_be_instant_columns(); - ut_ad(!m_cols_to_add.empty() || !m_cols_to_drop.empty()); + ut_ad(!m_cols_to_add.empty() || !m_cols_to_drop.empty() || + !m_cols_to_modify.empty()); if (!m_cols_to_drop.empty()) { /* INSTANT DROP */ @@ -249,6 +307,12 @@ bool Instant_ddl_impl
::commit_instant_ddl() { if (commit_instant_add_col()) return true; } + if (!m_cols_to_modify.empty()) { + if (commit_instant_modify_column()) { + return true; + } + } + /* Update the current row version in dictionary cache */ m_dict_table->current_row_version++; @@ -284,7 +348,8 @@ template bool Instant_ddl_impl::commit_instant_ddl(); static void populate_to_be_instant_columns_low( const Alter_inplace_info *ha_alter_info, const TABLE *old_table, - const TABLE *altered_table, Columns &cols_to_add, Columns &cols_to_drop) { + const TABLE *altered_table, Columns &cols_to_add, Columns &cols_to_drop, + Columns &cols_to_modify) { /* Collect all renamed columns */ using renamed_fields_t = std::pair; std::vector renamed_fields; @@ -348,6 +413,9 @@ static void populate_to_be_instant_columns_low( /* Not renamed, so must be being added */ cols_to_add.push_back(new_table_field); } + } else if (is_modified(old_table_field, new_table_field)) { + cols_to_modify.push_back(old_table_field); + cols_to_modify.push_back(new_table_field); } found = true; @@ -422,7 +490,7 @@ template void Instant_ddl_impl
::populate_to_be_instant_columns() { populate_to_be_instant_columns_low(m_ha_alter_info, m_old_table, m_altered_table, m_cols_to_add, - m_cols_to_drop); + m_cols_to_drop, m_cols_to_modify); } template @@ -445,3 +513,43 @@ void Instant_ddl_impl
::dd_commit_inplace_no_change(bool ignore_fts) { m_old_dd_tab->table()); } } + +template +bool Instant_ddl_impl
::commit_instant_modify_col_low() { + ut_ad(!m_dict_table->is_temporary()); + + /* To remember old default values if exist */ + dd_copy_table_columns(m_ha_alter_info, m_new_dd_tab->table(), + m_old_dd_tab->table(), m_dict_table); + + if (dd_table_has_instant_drop_cols(m_old_dd_tab->table())) { + /* Copy metadata of already dropped columns */ + if (copy_dropped_columns(&m_old_dd_tab->table(), &m_new_dd_tab->table(), + m_dict_table->current_row_version)) { + return true; + } + } + + /* Set old types and length of new columns. */ + dd_modify_instant_columns(m_old_table, m_altered_table, + &m_new_dd_tab->table(), m_dict_table, + m_cols_to_modify); + return false; +} + +template +bool Instant_ddl_impl
::is_instant_modify_possible( + const Alter_inplace_info *ha_alter_info, const TABLE *old_table, + const TABLE *altered_table, dict_table_t *table) { + int error = 0; + return Instant_ddl_impl
::is_instant_add_drop_possible( + ha_alter_info, old_table, altered_table, table, error); +} + +template bool Instant_ddl_impl::is_instant_modify_possible( + const Alter_inplace_info *ha_alter_info, const TABLE *old_table, + const TABLE *altered_table, dict_table_t *table); + +template bool Instant_ddl_impl::is_instant_modify_possible( + const Alter_inplace_info *ha_alter_info, const TABLE *old_table, + const TABLE *altered_table, dict_table_t *table); diff --git a/storage/innobase/dict/dict0mem.cc b/storage/innobase/dict/dict0mem.cc index e5acae27a00..ae662143385 100644 --- a/storage/innobase/dict/dict0mem.cc +++ b/storage/innobase/dict/dict0mem.cc @@ -894,3 +894,30 @@ std::ostream &operator<<(std::ostream &out, const dict_foreign_set &fk_set) { page_size_t dict_index_t::get_page_size() const { return (dict_table_page_size(table)); } + +ulint dict_col_t::get_old_fixed_len_for_log(bool comp) const { + /* now we only support instant modify for compact page format. */ + ut_ad(comp); + ut_ad(is_instant_modified()); + dict_col_t old_col; + + old_col.mtype = this->old_mtype; + old_col.prtype = this->old_prtype; + old_col.len = this->old_len; + old_col.mbminmaxlen = this->old_mbminmaxlen; + + ulint old_fixed_len = old_col.get_fixed_size(comp); + if (old_fixed_len > DICT_MAX_FIXED_COL_LEN) { + old_fixed_len = 0; + } + + if (old_fixed_len == 0 && (DATA_BIG_COL(&old_col))) { + /* variable-length field with maximum length > 255 */ + old_fixed_len = 0x7fff; + } + + if (old_col.prtype & DATA_NOT_NULL) { + old_fixed_len |= 0x8000; + } + return old_fixed_len; +} diff --git a/storage/innobase/dict/mem.cc b/storage/innobase/dict/mem.cc index 2e1ce1d93cf..dcebbd34871 100644 --- a/storage/innobase/dict/mem.cc +++ b/storage/innobase/dict/mem.cc @@ -268,6 +268,8 @@ dict_table_t *dict_mem_table_create(const char *name, space_id_t space, table->is_dd_table = false; table->explicitly_non_lru = false; + table->instant_modified_cols_cnt = 0; + return (table); } @@ -363,6 +365,11 @@ void dict_mem_fill_column_struct(dict_col_t *column, ulint col_pos, ulint mtype, column->mtype = (unsigned int)mtype; column->prtype = (unsigned int)prtype; column->len = (unsigned int)col_len; + column->modified_version = 0; + column->old_mtype = DATA_MTYPE_MAX; + column->old_prtype = 0; + column->old_len = 0; + column->old_mbminmaxlen = 0; column->instant_default = nullptr; column->is_visible = is_visible; column->set_phy_pos(phy_pos); diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8b9786c8b7f..93fbb94b45f 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -11331,6 +11331,7 @@ void innodb_base_col_setup_for_stored(const dict_table_t *table, uint32_t c_c = 0; uint32_t t_c = 0; uint32_t c_r_v = 0; + uint32_t m_c = 0; DBUG_TRACE; DBUG_PRINT("enter", ("table_name: %s", m_table_name)); @@ -11412,7 +11413,7 @@ void innodb_base_col_setup_for_stored(const dict_table_t *table, } if (part_table_with_instant_cols) { - dd_table_get_column_counters(*old_part_table, i_c, c_c, t_c, c_r_v); + dd_table_get_column_counters(*old_part_table, i_c, c_c, t_c, c_r_v, m_c); } table = dict_mem_table_create(m_table_name, space_id, actual_n_cols, num_v, @@ -11448,6 +11449,7 @@ void innodb_base_col_setup_for_stored(const dict_table_t *table, table->initial_col_count = n_cols - num_v; table->current_col_count = table->initial_col_count; table->total_col_count = table->initial_col_count; + table->instant_modified_cols_cnt = 0; } else { /* This is a new partition getting created. We need to inherit INSTANT instant metadata from old partition table */ @@ -11456,11 +11458,17 @@ void innodb_base_col_setup_for_stored(const dict_table_t *table, table->total_col_count = t_c; table->current_row_version = c_r_v; table->discard_after_ddl = true; + table->instant_modified_cols_cnt = m_c; #ifdef UNIV_DEBUG /* Get and set current row version for table */ uint32_t v = 0; for (auto col : old_part_table->columns()) { + if (dd_column_is_modified(col)) { + uint32_t v_modified = dd_column_get_version_modified(col); + v = std::max(v_modified, v); + } + if (dd_column_is_dropped(col)) { uint32_t value = dd_column_get_version_dropped(col); v = std::max(v, value); @@ -11591,6 +11599,10 @@ void innodb_base_col_setup_for_stored(const dict_table_t *table, uint32_t v_added = UINT32_UNDEFINED; uint32_t v_dropped = UINT32_UNDEFINED; uint32_t phy_pos = UINT32_UNDEFINED; + uint32_t v_modified = UINT32_UNDEFINED; + uint32_t old_mtype = UINT32_UNDEFINED; + uint32_t old_prtype = UINT32_UNDEFINED; + uint32_t old_len = UINT32_UNDEFINED; if (part_table_with_instant_cols) { const dd::Column *old_part_col = @@ -11607,6 +11619,26 @@ void innodb_base_col_setup_for_stored(const dict_table_t *table, const char *s = dd_column_key_strings[DD_INSTANT_PHYSICAL_POS]; ut_ad(old_part_col->se_private_data().exists(s)); old_part_col->se_private_data().get(s, &phy_pos); + + /* get version modified */ + s = dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED]; + if (old_part_col->se_private_data().exists(s)) { + old_part_col->se_private_data().get(s, &v_modified); + ut_a(v_modified > 0 && v_modified != UINT32_UNDEFINED); + /* get old_mtype */ + s = dd_column_key_strings[DD_INSTANT_COLUMN_MTYPE]; + ut_ad(old_part_col->se_private_data().exists(s)); + old_part_col->se_private_data().get(s, &old_mtype); + ut_a(old_mtype != DATA_MTYPE_MAX && old_mtype != UINT32_UNDEFINED); + /* get old_prtype */ + s = dd_column_key_strings[DD_INSTANT_COLUMN_PRTYPE]; + ut_ad(old_part_col->se_private_data().exists(s)); + old_part_col->se_private_data().get(s, &old_prtype); + /* get old_len */ + s = dd_column_key_strings[DD_INSTANT_COLUMN_LEN]; + ut_ad(old_part_col->se_private_data().exists(s)); + old_part_col->se_private_data().get(s, &old_len); + } } dict_mem_table_add_col( @@ -11616,6 +11648,21 @@ void innodb_base_col_setup_for_stored(const dict_table_t *table, charset_no), col_len, !field->is_hidden_by_system(), phy_pos, v_added, v_dropped); + if (v_modified != UINT32_UNDEFINED && v_modified > 0) { + /* instant modified */ + ulint mbminlen; + ulint mbmaxlen; + dict_col_t *col = table->get_col(table->n_def - 1); + ut_a(strcmp(field_name, table->get_col_name(dict_col_get_no(col))) == + 0); + col->modified_version = v_modified; + col->old_mtype = old_mtype; + col->old_prtype = old_prtype; + col->old_len = old_len; + dtype_get_mblen(col->old_mtype, col->old_prtype, &mbminlen, &mbmaxlen); + col->old_mbminmaxlen = DATA_MBMINMAXLEN(mbminlen, mbmaxlen); + } + if (dd_is_valid_row_version(v_added)) { mem_heap_t *instant_heap = mem_heap_create(1000, UT_LOCATION_HERE); const dd::Column *old_part_col = @@ -18661,6 +18708,11 @@ int ha_innobase::external_lock(THD *thd, /*!< in: handle to the user thread */ return HA_ERR_NO_SUCH_TABLE; } + if (m_prebuilt->table->has_instant_modified_cols()) { + ib::error() << "Export is not supported for instantly modified table"; + return HA_ERR_WRONG_COMMAND; + } + row_quiesce_table_start(m_prebuilt->table, trx); /* Use the transaction instance to track UNLOCK diff --git a/storage/innobase/handler/ha_innopart.cc b/storage/innobase/handler/ha_innopart.cc index abcc2965144..21a493228cc 100644 --- a/storage/innobase/handler/ha_innopart.cc +++ b/storage/innobase/handler/ha_innopart.cc @@ -4040,6 +4040,11 @@ int ha_innopart::external_lock(THD *thd, int lock_type) { return (HA_ERR_NO_SUCH_TABLE); } + if (m_prebuilt->table->has_instant_modified_cols()) { + ib::error() << "Export is not supported for instantly modified table"; + return HA_ERR_WRONG_COMMAND; + } + row_quiesce_table_start(table, m_prebuilt->trx); /* Use the transaction instance to track diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index c84121017e2..361c50daf62 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -573,6 +573,27 @@ static void dd_inplace_alter_copy_instant_metadata( ut_ad(v_added == UINT32_UNDEFINED); } } + /* Copy info for instant modify. */ + s = dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED]; + if (old_dd_column->se_private_data().exists(s)) { + /* copy modified version */ + uint32_t v_modified = UINT32_UNDEFINED; + fn(s, v_modified); + ut_a(v_modified > 0); + /* copy old_mtype */ + s = dd_column_key_strings[DD_INSTANT_COLUMN_MTYPE]; + uint32_t v_old_mtype = UINT32_UNDEFINED; + fn(s, v_old_mtype); + ut_a(v_old_mtype != DATA_MTYPE_MAX); + /* copy old_prtype */ + uint32_t v_old_prtype = UINT32_UNDEFINED; + s = dd_column_key_strings[DD_INSTANT_COLUMN_PRTYPE]; + fn(s, v_old_prtype); + /* copy old_len */ + uint32_t v_old_len = UINT32_UNDEFINED; + s = dd_column_key_strings[DD_INSTANT_COLUMN_LEN]; + fn(s, v_old_len); + } } if (dd_table_has_instant_drop_cols(*old_dd_tab)) { @@ -810,6 +831,17 @@ static bool ok_to_rename_column(const Alter_inplace_info *ha_alter_info, return true; } +/** Determine if one ALTER TABLE MODIFY COLUMN can be done instantly +on the table +@param[in] ha_alter_info The DDL operation +@param[in] table InnoDB table +@param[in] old_table old TABLE +@param[in] altered_table new TABLE +@return true if supported */ +static inline bool innobase_support_instant_modify( + const Alter_inplace_info *ha_alter_info, const dict_table_t *table, + const TABLE *old_table, const TABLE *altered_table); + /** Determine if one ALTER TABLE can be done instantly on the table @param[in] ha_alter_info The DDL operation @param[in] table InnoDB table @@ -826,8 +858,20 @@ static inline Instant_Type innobase_support_instant( Alter_inplace_info::HA_ALTER_FLAGS alter_inplace_flags = ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE; + bool try_instant_modify = false; + if ((alter_inplace_flags == Alter_inplace_info::ALTER_STORED_COLUMN_TYPE || + alter_inplace_flags == + Alter_inplace_info::ALTER_COLUMN_EQUAL_PACK_LENGTH || + alter_inplace_flags == + (Alter_inplace_info::ALTER_STORED_COLUMN_TYPE | + Alter_inplace_info::ALTER_COLUMN_EQUAL_PACK_LENGTH))) { + try_instant_modify = true; + } + if (alter_inplace_flags & ~INNOBASE_INSTANT_ALLOWED) { - return (Instant_Type::INSTANT_IMPOSSIBLE); + if (!try_instant_modify) { + return (Instant_Type::INSTANT_IMPOSSIBLE); + } } /* During upgrade, if columns are added in system tables, avoid instant */ @@ -843,6 +887,7 @@ static inline Instant_Type innobase_support_instant( column RENAME */ INSTANT_DROP, /*|< INSTANT DROP possibly with virtual column ADD/DROP and column RENAME */ + INSTANT_MODIFY, NONE }; @@ -864,6 +909,8 @@ static inline Instant_Type innobase_support_instant( op = INSTANT_OPERATION::INSTANT_ADD; } else if (alter_inplace_flags & Alter_inplace_info::DROP_STORED_COLUMN) { op = INSTANT_OPERATION::INSTANT_DROP; + } else if (try_instant_modify) { + op = INSTANT_OPERATION::INSTANT_MODIFY; } switch (op) { @@ -897,6 +944,21 @@ static inline Instant_Type innobase_support_instant( return (Instant_Type::INSTANT_ADD_DROP_COLUMN); } break; + case INSTANT_OPERATION::INSTANT_MODIFY: + if (ha_alter_info->alter_info->requested_algorithm != + Alter_info::ALTER_TABLE_ALGORITHM_INSTANT) { + break; + } + /* We also use this function to check if instant modify is supported. */ + if (!table->support_instant_add_drop()) { + return (Instant_Type::INSTANT_IMPOSSIBLE); + } + if (!innobase_support_instant_modify(ha_alter_info, table, old_table, + altered_table)) { + return (Instant_Type::INSTANT_IMPOSSIBLE); + } + return (Instant_Type::INSTANT_MODIFY_COLUMN); + break; case INSTANT_OPERATION::NONE: break; } @@ -993,21 +1055,22 @@ enum_alter_inplace_result ha_innobase::check_if_supported_inplace_alter( update_thd(); + bool check_instant_modify = false; if (ha_alter_info->handler_flags & ~(INNOBASE_INPLACE_IGNORE | INNOBASE_ALTER_NOREBUILD | INNOBASE_ALTER_REBUILD)) { if (ha_alter_info->handler_flags & Alter_inplace_info::ALTER_STORED_COLUMN_TYPE) { - if (ha_alter_info->alter_info->requested_algorithm == + if (ha_alter_info->alter_info->requested_algorithm != Alter_info::ALTER_TABLE_ALGORITHM_INSTANT) { - ha_alter_info->unsupported_reason = innobase_get_err_msg( - ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE_INSTANT); - } else { ha_alter_info->unsupported_reason = innobase_get_err_msg( ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE); + return HA_ALTER_INPLACE_NOT_SUPPORTED; } + check_instant_modify = true; + } else { + return HA_ALTER_INPLACE_NOT_SUPPORTED; } - return HA_ALTER_INPLACE_NOT_SUPPORTED; } /* Only support online add foreign key constraint when check_foreigns is @@ -1028,14 +1091,23 @@ enum_alter_inplace_result ha_innobase::check_if_supported_inplace_alter( Instant_Type instant_type = innobase_support_instant( ha_alter_info, m_prebuilt->table, this->table, altered_table); + if (check_instant_modify && + instant_type == Instant_Type::INSTANT_IMPOSSIBLE) { + ha_alter_info->unsupported_reason = innobase_get_err_msg( + ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE_INSTANT); + return HA_ALTER_INPLACE_NOT_SUPPORTED; + } + ha_alter_info->handler_trivial_ctx = instant_type_to_int(Instant_Type::INSTANT_IMPOSSIBLE); if (!dict_table_is_partition(m_prebuilt->table)) { + int local_error = 0; switch (instant_type) { case Instant_Type::INSTANT_IMPOSSIBLE: break; case Instant_Type::INSTANT_ADD_DROP_COLUMN: + case Instant_Type::INSTANT_MODIFY_COLUMN: if (ha_alter_info->alter_info->requested_algorithm == Alter_info::ALTER_TABLE_ALGORITHM_INPLACE) { /* Still fall back to INPLACE since the behaviour is different */ @@ -1062,15 +1134,23 @@ enum_alter_inplace_result ha_innobase::check_if_supported_inplace_alter( /* INSTANT can't be done any more. Fall back to INPLACE. */ break; - } else if (!Instant_ddl_impl::is_instant_add_drop_possible( + } else if (instant_type == Instant_Type::INSTANT_ADD_DROP_COLUMN && + !Instant_ddl_impl::is_instant_add_drop_possible( ha_alter_info, table, altered_table, - m_prebuilt->table)) { + m_prebuilt->table, local_error)) { if (ha_alter_info->alter_info->requested_algorithm == Alter_info::ALTER_TABLE_ALGORITHM_INSTANT) { - /* Return error if either max possible row size already crosses max - permissible row size or may cross it after add. */ - my_error(ER_INNODB_INSTANT_ADD_DROP_NOT_SUPPORTED_MAX_SIZE, MYF(0)); - return HA_ALTER_ERROR; + if (local_error == 1) { + /* Return error if either max possible row size already crosses + max permissible row size or may cross it after add. */ + my_error(ER_INNODB_INSTANT_ADD_DROP_NOT_SUPPORTED_MAX_SIZE, + MYF(0)); + return HA_ALTER_ERROR; + } else { + ha_alter_info->unsupported_reason = innobase_get_err_msg( + ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE_INSTANT); + return HA_ALTER_INPLACE_NOT_SUPPORTED; + } } /* INSTANT can't be done. Fall back to INPLACE. */ @@ -1079,6 +1159,15 @@ enum_alter_inplace_result ha_innobase::check_if_supported_inplace_alter( /* In this case, it can't be instant because the table may not be empty. Have to fall back to INPLACE */ break; + } else if (instant_type == Instant_Type::INSTANT_MODIFY_COLUMN && + !Instant_ddl_impl::is_instant_modify_possible( + ha_alter_info, table, altered_table, + m_prebuilt->table)) { + if (ha_alter_info->alter_info->requested_algorithm == + Alter_info::ALTER_TABLE_ALGORITHM_INSTANT) { + my_error(ER_INNODB_INSTANT_MODIFY_NOT_SUPPORTED_MAX_SIZE, MYF(0)); + return HA_ALTER_ERROR; + } } [[fallthrough]]; case Instant_Type::INSTANT_NO_CHANGE: @@ -8960,6 +9049,28 @@ void alter_part_add::inherit_instant_metadata(const dd::Table *source, ut_ad(v_added == UINT32_UNDEFINED || v_dropped > 0); } } + + /* Copy info for instant modify. */ + if (dd_column_is_modified(src_col)) { + s = dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED]; + /* copy modified version */ + uint32_t v_modified = 0; + fn(s, v_modified); + ut_a(v_modified > 0); + /* copy old_mtype */ + s = dd_column_key_strings[DD_INSTANT_COLUMN_MTYPE]; + uint32_t v_old_mtype = UINT32_UNDEFINED; + fn(s, v_old_mtype); + ut_a(v_old_mtype != DATA_MTYPE_MAX && v_old_mtype != UINT32_UNDEFINED); + /* copy old_prtype */ + uint32_t v_old_prtype = UINT32_UNDEFINED; + s = dd_column_key_strings[DD_INSTANT_COLUMN_PRTYPE]; + fn(s, v_old_prtype); + /* copy old_len */ + uint32_t v_old_len = UINT32_UNDEFINED; + s = dd_column_key_strings[DD_INSTANT_COLUMN_LEN]; + fn(s, v_old_len); + } } } @@ -10193,10 +10304,12 @@ enum_alter_inplace_result ha_innopart::check_if_supported_inplace_alter( ha_alter_info->handler_trivial_ctx = instant_type_to_int(Instant_Type::INSTANT_IMPOSSIBLE); + int local_error = 0; switch (instant_type) { case Instant_Type::INSTANT_IMPOSSIBLE: break; case Instant_Type::INSTANT_ADD_DROP_COLUMN: + case Instant_Type::INSTANT_MODIFY_COLUMN: if (ha_alter_info->alter_info->requested_algorithm == Alter_info::ALTER_TABLE_ALGORITHM_INPLACE) { break; @@ -10221,14 +10334,22 @@ enum_alter_inplace_result ha_innopart::check_if_supported_inplace_alter( } /* INSTANT can't be done any more. Fall back to INPLACE. */ break; - } else if (!Instant_ddl_impl::is_instant_add_drop_possible( - ha_alter_info, table, altered_table, m_prebuilt->table)) { + } else if (instant_type == Instant_Type::INSTANT_ADD_DROP_COLUMN && + !Instant_ddl_impl::is_instant_add_drop_possible( + ha_alter_info, table, altered_table, m_prebuilt->table, + local_error)) { if (ha_alter_info->alter_info->requested_algorithm == Alter_info::ALTER_TABLE_ALGORITHM_INSTANT) { - /* Return error if either max possible row size already crosses max - permissible row size or may cross it after add. */ - my_error(ER_INNODB_INSTANT_ADD_DROP_NOT_SUPPORTED_MAX_SIZE, MYF(0)); - return HA_ALTER_ERROR; + if (local_error == 1) { + /* Return error if either max possible row size already crosses max + permissible row size or may cross it after add. */ + my_error(ER_INNODB_INSTANT_ADD_DROP_NOT_SUPPORTED_MAX_SIZE, MYF(0)); + return HA_ALTER_ERROR; + } else { + ha_alter_info->unsupported_reason = innobase_get_err_msg( + ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE_INSTANT); + return HA_ALTER_INPLACE_NOT_SUPPORTED; + } } /* INSTANT can't be done. Fall back to INPLACE. */ @@ -10237,6 +10358,14 @@ enum_alter_inplace_result ha_innopart::check_if_supported_inplace_alter( /* In this case, it can't be instant because the table may not be empty. Have to fall back to INPLACE */ break; + } else if (instant_type == Instant_Type::INSTANT_MODIFY_COLUMN && + !Instant_ddl_impl::is_instant_modify_possible( + ha_alter_info, table, altered_table, m_prebuilt->table)) { + if (ha_alter_info->alter_info->requested_algorithm == + Alter_info::ALTER_TABLE_ALGORITHM_INSTANT) { + my_error(ER_INNODB_INSTANT_MODIFY_NOT_SUPPORTED_MAX_SIZE, MYF(0)); + return HA_ALTER_ERROR; + } } [[fallthrough]]; case Instant_Type::INSTANT_NO_CHANGE: @@ -11090,3 +11219,185 @@ func_exit: return error; } + +/** Determine if ALTER TABLE MODIFY COLUMN can be done instantly +on the table +@param[in] ha_alter_info The DDL operation +@param[in] table InnoDB table +@param[in] old_table old TABLE +@param[in] altered_table new TABLE +@return true if supported */ +static inline bool innobase_support_instant_modify( + const Alter_inplace_info *ha_alter_info, const dict_table_t *table, + const TABLE *old_table, const TABLE *altered_table) { + const Create_field *new_field; + ulint i = 0; + dict_col_t *col = NULL; + if (!dict_table_is_comp(table)) { + return (false); + } + if (table->is_upgraded_instant()) { + /* For convenience, we do not support instant modify table which has + instant added column in V1. */ + sql_print_information( + "instant modify is not supported for upgraded instant"); + return false; + } + List_iterator_fast cf_it( + ha_alter_info->alter_info->create_list); + while ((new_field = (cf_it++)) != NULL) { + const Field *field = new_field->field; + const Field *old_field = NULL; + ulint is_virtual; + ulint n_vcols = 0; + ulint old_i; + i++; + is_virtual = (innobase_is_v_fld(field)) ? DATA_VIRTUAL : 0; + if (is_virtual) { + n_vcols++; + } + /* Skip unchanged columns. */ + if (!new_field->change) { + continue; + } + /* Check if the column is in index, if yes, not supported. */ + for (KEY *new_key = ha_alter_info->key_info_buffer; + new_key < ha_alter_info->key_info_buffer + ha_alter_info->key_count; + new_key++) { + for (KEY_PART_INFO *key_part = new_key->key_part; + key_part < new_key->key_part + new_key->user_defined_key_parts; + key_part++) { + const Field *table_field = altered_table->field[key_part->fieldnr]; + if (my_strcasecmp(system_charset_info, field->field_name, + table_field->field_name) == 0) { + return (false); + } + } + } + for (old_i = 0; old_table->field[old_i]; old_i++) { + const Field *n_field = old_table->field[old_i]; + if (field == n_field) { + break; + } + } + if (is_virtual) { + return (false); + } + field = altered_table->field[i - 1]; + old_field = old_table->field[old_i]; + /* check if modified one column more the one time */ + col = table->get_col(i - 1 - n_vcols); + if (col->is_instant_modified()) { + return (false); + } + if (col->is_instant_added() || col->is_instant_dropped()) { + /* In this commit we do not support instantly added or dropped column. */ + return false; + } + if (field->charset() != old_field->charset() || + field->key_length() < old_field->key_length() || + field->binary() != old_field->binary()) { + return (false); + } + if (old_field->real_type() == MYSQL_TYPE_TINY) { + /* check type */ + if (field->real_type() != MYSQL_TYPE_SHORT && + field->real_type() != MYSQL_TYPE_INT24 && + field->real_type() != MYSQL_TYPE_LONG && + field->real_type() != MYSQL_TYPE_LONGLONG) { + return (false); + } + /* check unsigned */ + if (old_field->key_type() == HA_KEYTYPE_BINARY /* tinyint */ + && (field->key_type() != HA_KEYTYPE_USHORT_INT /* smallint */ + && field->key_type() != HA_KEYTYPE_UINT24 /* mediumint */ + && field->key_type() != HA_KEYTYPE_ULONG_INT /* int */ + && field->key_type() != HA_KEYTYPE_ULONGLONG)) { /* bigint */ + return (false); + } + /* check signed */ + if (old_field->key_type() == HA_KEYTYPE_INT8 /* tinyint */ + && (field->key_type() != HA_KEYTYPE_SHORT_INT /* smallint */ + && field->key_type() != HA_KEYTYPE_INT24 /* mediumint */ + && field->key_type() != HA_KEYTYPE_LONG_INT /* int */ + && field->key_type() != HA_KEYTYPE_LONGLONG)) { /* bigint */ + return (false); + } + } else if (old_field->real_type() == MYSQL_TYPE_SHORT) { + /* check type */ + if (field->real_type() != MYSQL_TYPE_INT24 && + field->real_type() != MYSQL_TYPE_LONG && + field->real_type() != MYSQL_TYPE_LONGLONG) { + return (false); + } + /* check unsigned */ + if (old_field->key_type() == HA_KEYTYPE_USHORT_INT /* smallint */ + && (field->key_type() != HA_KEYTYPE_UINT24 /* mediumint */ + && field->key_type() != HA_KEYTYPE_ULONG_INT /* int */ + && field->key_type() != HA_KEYTYPE_ULONGLONG)) { /* bigint */ + return (false); + } + /* check signed */ + if (old_field->key_type() == HA_KEYTYPE_SHORT_INT /* tinyint */ + && (field->key_type() != HA_KEYTYPE_INT24 /* mediumint */ + && field->key_type() != HA_KEYTYPE_LONG_INT /* int */ + && field->key_type() != HA_KEYTYPE_LONGLONG)) { /* bigint */ + return (false); + } + } else if (old_field->real_type() == MYSQL_TYPE_INT24) { + /* check type */ + if (field->real_type() != MYSQL_TYPE_LONG && + field->real_type() != MYSQL_TYPE_LONGLONG) { + return (false); + } + /* check unsigned */ + if (old_field->key_type() == HA_KEYTYPE_UINT24 /* mediumint */ + && (field->key_type() != HA_KEYTYPE_ULONG_INT /* int */ + && field->key_type() != HA_KEYTYPE_ULONGLONG)) { /* bigint */ + return (false); + } + /* check signed */ + if (old_field->key_type() == HA_KEYTYPE_INT24 /* mediumint */ + && (field->key_type() != HA_KEYTYPE_LONG_INT /* int */ + && field->key_type() != HA_KEYTYPE_LONGLONG)) { /* bigint */ + return (false); + } + } else if (old_field->real_type() == MYSQL_TYPE_LONG) { + /* check type */ + if (field->real_type() != MYSQL_TYPE_LONGLONG) { + return (false); + } + /* check unsigned */ + if (old_field->key_type() == HA_KEYTYPE_ULONG_INT /* int*/ + && field->key_type() != HA_KEYTYPE_ULONGLONG) { /* bigint */ + return (false); + } + /* check signed */ + if (old_field->key_type() == HA_KEYTYPE_LONG_INT /* mediumint */ + && field->key_type() != HA_KEYTYPE_LONGLONG) { /* bigint */ + return (false); + } + } else if (old_field->real_type() == MYSQL_TYPE_VAR_STRING) { + if (field->real_type() != MYSQL_TYPE_VAR_STRING && + field->real_type() != MYSQL_TYPE_VARCHAR && + field->real_type() != MYSQL_TYPE_STRING) { + return (false); + } + } else if (old_field->real_type() == MYSQL_TYPE_VARCHAR) { + if (field->real_type() != MYSQL_TYPE_VAR_STRING && + field->real_type() != MYSQL_TYPE_VARCHAR && + field->real_type() != MYSQL_TYPE_STRING) { + return (false); + } + } else if (old_field->real_type() == MYSQL_TYPE_STRING) { + if (field->real_type() != MYSQL_TYPE_VAR_STRING && + field->real_type() != MYSQL_TYPE_VARCHAR && + field->real_type() != MYSQL_TYPE_STRING) { + return (false); + } + } else { + return (false); + } + } + return (true); +} diff --git a/storage/innobase/include/dict0dd.h b/storage/innobase/include/dict0dd.h index 447b3e2e334..8de73186a94 100644 --- a/storage/innobase/include/dict0dd.h +++ b/storage/innobase/include/dict0dd.h @@ -92,6 +92,10 @@ uint32_t dd_column_get_version_added(const dd::Column *dd_col); /** Get the row version in which column is INSTANT DROP */ uint32_t dd_column_get_version_dropped(const dd::Column *dd_col); +bool dd_column_is_modified(const dd::Column *dd_col); + +uint32_t dd_column_get_version_modified(const dd::Column *dd_col); + /** Maximum hardcoded data dictionary tables. */ constexpr uint32_t DICT_MAX_DD_TABLES = 1024; @@ -135,6 +139,14 @@ enum dd_column_keys { DD_INSTANT_VERSION_DROPPED, /** Column physical position on row when it was created */ DD_INSTANT_PHYSICAL_POS, + /** Row version when this column was modified instantly */ + DD_INSTANT_VERSION_MODIFIED, + /** Column mtype before it was modified instantly */ + DD_INSTANT_COLUMN_MTYPE, + /** Column prtype before it was modified instantly */ + DD_INSTANT_COLUMN_PRTYPE, + /** Column len before it was modified instantly */ + DD_INSTANT_COLUMN_LEN, /** Sentinel */ DD_COLUMN__LAST }; @@ -235,8 +247,9 @@ const char *const dd_table_key_strings[DD_TABLE__LAST] = { /** InnoDB private key strings for dd::Column, @see dd_column_keys */ const char *const dd_column_key_strings[DD_COLUMN__LAST] = { - "default", "default_null", "version_added", "version_dropped", - "physical_pos"}; + "default", "default_null", "version_added", + "version_dropped", "physical_pos", "modified_version", + "modified_mtype", "modified_prtype", "modified_len"}; /** InnoDB private key strings for dd::Partition. @see dd_partition_keys */ const char *const dd_partition_key_strings[DD_PARTITION__LAST] = { @@ -465,17 +478,26 @@ static inline bool is_system_column(const char *col_name) { @param[in] current_row_version current row version */ inline void dd_table_get_column_counters(const dd::Table &table, uint32_t &i_c, uint32_t &c_c, uint32_t &t_c, - uint32_t ¤t_row_version) { + uint32_t ¤t_row_version, + uint32_t &m_c) { size_t n_dropped_cols = 0; size_t n_added_cols = 0; size_t n_added_and_dropped_cols = 0; size_t n_current_cols = 0; + size_t n_modified_cols = 0; for (const auto column : table.columns()) { if (is_system_column(column->name().c_str()) || column->is_virtual()) { continue; } + if (dd_column_is_modified(column)) { + uint32_t v_modified = dd_column_get_version_modified(column); + ut_ad(dd_is_valid_row_version(v_modified)); + current_row_version = std::max(current_row_version, v_modified); + n_modified_cols++; + } + if (dd_column_is_dropped(column)) { n_dropped_cols++; if (dd_column_is_added(column)) { @@ -505,6 +527,7 @@ inline void dd_table_get_column_counters(const dd::Table &table, uint32_t &i_c, c_c = n_current_cols; i_c = (n_current_cols - n_added_cols) + n_orig_dropped_cols; t_c = n_current_cols + n_dropped_cols; + m_c = n_modified_cols; } /** Determine if a dd::Table has row versions @@ -532,11 +555,27 @@ inline bool dd_table_has_row_versions(const dd::Table &table) { break; } + if (!has_row_version) { + /* no column is instant added/dropped, we should check all columns for + instant modify */ + for (const auto column : table.columns()) { + if (column->is_virtual()) { + continue; + } + if (column->se_private_data().exists( + dd_column_key_strings[DD_INSTANT_VERSION_MODIFIED])) { + has_row_version = true; + break; + } + } + } + #ifdef UNIV_DEBUG if (has_row_version) { bool found_inst_add_or_drop_col = false; for (const auto column : table.columns()) { - if (dd_column_is_dropped(column) || dd_column_is_added(column)) { + if (dd_column_is_dropped(column) || dd_column_is_added(column) || + dd_column_is_modified(column)) { found_inst_add_or_drop_col = true; break; } @@ -1592,6 +1631,20 @@ bool is_dropped(const Alter_inplace_info *ha_alter_info, void get_field_types(const dd::Table *dd_tab, const dict_table_t *m_table, const Field *field, unsigned &col_len, ulint &mtype, ulint &prtype); + +/** Set column information (datatype, length) for instantly modified columns +@param[in] old_table MySQL table as it is before the ALTER operation +@param[in] altered_table MySQL table that is being altered +@param[in,out] new_dd_table New dd::Table +@param[in] new_table New InnoDB table object */ +void dd_modify_instant_columns(const TABLE *old_table, + const TABLE *altered_table, + dd::Table *new_dd_table, + const dict_table_t *new_table, + const Columns &cols_to_modify); + +bool is_modified(Field *old_field, Field *new_field); + #endif #include "dict0dd.ic" diff --git a/storage/innobase/include/dict0inst.h b/storage/innobase/include/dict0inst.h index 7ecb82740f6..d9f6191e9a9 100644 --- a/storage/innobase/include/dict0inst.h +++ b/storage/innobase/include/dict0inst.h @@ -51,7 +51,9 @@ enum class Instant_Type : uint16_t { INSTANT_ADD_DROP_COLUMN, /** Column rename */ - INSTANT_COLUMN_RENAME + INSTANT_COLUMN_RENAME, + + INSTANT_MODIFY_COLUMN, }; using Columns = std::vector; @@ -98,10 +100,13 @@ class Instant_ddl_impl { @param[in] table MySQL table before ALTER @param[in] altered_table MySQL table after ALTER @param[in] dict_table InnoDB table definition cache + @param[out] error 1: error caused by instant add + 2: error caused by instant drop + 3: error caused by instant modify @return true if INSTANT ADD/DROP can be done, false otherwise. */ static bool is_instant_add_drop_possible( const Alter_inplace_info *ha_alter_info, const TABLE *table, - const TABLE *altered_table, const dict_table_t *dict_table); + const TABLE *altered_table, const dict_table_t *dict_table, int &error); private: /** Add column instantly @@ -164,6 +169,19 @@ class Instant_ddl_impl { Table *m_new_dd_tab; uint64_t *m_autoinc; + + /* Columns which are to be modified instantly, old column and new column both + are stored. */ + Columns m_cols_to_modify; + + bool commit_instant_modify_column(); + + bool commit_instant_modify_col_low(); + + public: + static bool is_instant_modify_possible( + const Alter_inplace_info *ha_alter_info, const TABLE *old_table, + const TABLE *altered_table, dict_table_t *dict_table); }; #endif /* dict0inst_h */ diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index 758206f81ff..47426efcdb7 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -794,6 +794,31 @@ struct dict_col_t { return false; } #endif /* UNIV_DEBUG */ + + public: + /* for instant modified cols */ + unsigned modified_version : 10; + unsigned old_prtype : 32; + unsigned old_mtype : 8; + unsigned old_len : 16; + unsigned old_mbminmaxlen : 5; + bool is_instant_modified() const { + return (!is_virtual() && modified_version > 0 && + old_mtype != DATA_MTYPE_MAX); + } + uint8_t get_version_modified() const { return modified_version; } + void set_version_modified(uint8_t version) { modified_version = version; } + ulint get_old_fixed_len_for_log(bool comp) const; + void set_old_type_from_log(ulint old_fixed_len) { + this->old_mtype = + ((old_fixed_len + 1) & 0x7fff) <= 1 ? DATA_BINARY : DATA_FIXBINARY; + this->old_prtype = (old_fixed_len & 0x8000 ? DATA_NOT_NULL : 0); + this->old_len = (old_fixed_len & 0x3fff); + } + bool is_modified_after(uint8_t version) const { + ut_ad(is_valid_row_version(version)); + return (is_instant_modified() && version < modified_version); + } }; /** Index information put in a list of virtual column structure. Index @@ -1631,6 +1656,11 @@ struct dict_index_t { /** Get the space id of the tablespace to which this index belongs. @return the space id. */ space_id_t space_id() const { return space; } + + public: + /** Check whether index has any instantly modified columns + @return true if this is instant affected, otherwise false */ + bool has_instant_modified_cols() const; }; /** The status of online index creation */ @@ -2465,7 +2495,8 @@ detect this and will eventually quit sooner. */ /** @returns true if the table has row versions.. */ bool has_row_versions() const { if (current_row_version > 0) { - ut_ad(has_instant_add_cols() || has_instant_drop_cols()); + ut_ad(has_instant_add_cols() || has_instant_drop_cols() || + has_instant_modified_cols()); return (true); } @@ -2697,6 +2728,16 @@ detect this and will eventually quit sooner. */ /** Determine if the table can support instant ADD/DROP COLUMN */ inline bool support_instant_add_drop() const; + + public: + int instant_modified_cols_cnt{0}; + /** @return true if there was any instantly modified column. + This will be true after one or more instant modified COLUMN, however, + it would become false after ALTER TABLE which rebuilds or copies + the old table. */ + bool has_instant_modified_cols() const { + return (instant_modified_cols_cnt != 0); + } }; static inline void DICT_TF2_FLAG_SET(dict_table_t *table, uint32_t flag) { diff --git a/storage/innobase/include/dict0mem.ic b/storage/innobase/include/dict0mem.ic index 9a6b5024608..05c3a97c7dc 100644 --- a/storage/innobase/include/dict0mem.ic +++ b/storage/innobase/include/dict0mem.ic @@ -99,3 +99,10 @@ inline uint32_t dict_index_t::get_instant_fields() const { return n_instant_fields; } + +/** Check whether index has any instantly modified columns, +seconddary index don't have instant modified coulmns +@return true if this is instant affected, otherwise false */ +inline bool dict_index_t::has_instant_modified_cols() const { + return (this->is_clustered() && table->has_instant_modified_cols()); +} diff --git a/storage/innobase/include/row0row.h b/storage/innobase/include/row0row.h index a3b661d2b17..b92084559ae 100644 --- a/storage/innobase/include/row0row.h +++ b/storage/innobase/include/row0row.h @@ -548,6 +548,10 @@ class Multi_value_entry_builder_insert : public Multi_value_entry_builder { } }; +/** set data for instant old version record */ +void dfield_set_data_instant(const dict_field_t *ind_field, dfield_t *dfield, + const byte *field, ulint len, mem_heap_t *heap); + #include "row0row.ic" #endif diff --git a/storage/innobase/include/row0sel.h b/storage/innobase/include/row0sel.h index e6b05ccadff..df1243eb86d 100644 --- a/storage/innobase/include/row0sel.h +++ b/storage/innobase/include/row0sel.h @@ -440,15 +440,14 @@ mysql_col_len, mbminlen, mbmaxlen range comparison. */ void row_sel_field_store_in_mysql_format_func( byte *dest, const mysql_row_templ_t *templ, const dict_index_t *index, - IF_DEBUG(ulint field_no, ) const byte *data, - ulint len IF_DEBUG(, ulint sec_field)); + ulint field_no, const byte *data, ulint len IF_DEBUG(, ulint sec_field)); /** Convert a non-SQL-NULL field from Innobase format to MySQL format. */ static inline void row_sel_field_store_in_mysql_format( byte *dest, const mysql_row_templ_t *templ, const dict_index_t *idx, ulint field, const byte *src, ulint len, ulint sec) { row_sel_field_store_in_mysql_format_func( - dest, templ, idx, IF_DEBUG(field, ) src, len IF_DEBUG(, sec)); + dest, templ, idx, field, src, len IF_DEBUG(, sec)); } /** Search the record present in innodb_table_stats table using diff --git a/storage/innobase/include/row0upd.h b/storage/innobase/include/row0upd.h index 48457d3e462..8705667db26 100644 --- a/storage/innobase/include/row0upd.h +++ b/storage/innobase/include/row0upd.h @@ -590,9 +590,26 @@ struct upd_t { /** Array of update fields. */ upd_field_t *fields; + /* allocated length of update fields. */ + ulint n_allocated_fields; + /** Append an update field to the end of array @param[in] field an update field */ - void append(const upd_field_t &field) { fields[n_fields++] = field; } + void append(const upd_field_t &field) { + if (n_fields >= n_allocated_fields) { + /* we should allocate a new array of fields */ + ulint new_fields_count = n_allocated_fields * 2; + upd_field_t *new_fields = static_cast( + mem_heap_zalloc(heap, sizeof(upd_field_t) * new_fields_count)); + for (ulint i = 0; i < n_fields; i++) { + new_fields[i] = fields[i]; + } + fields = new_fields; + n_allocated_fields = new_fields_count; + } + ut_ad(n_fields < n_allocated_fields); + fields[n_fields++] = field; + } /** Determine if the given field_no is modified. @return true if modified, false otherwise. */ diff --git a/storage/innobase/include/row0upd.ic b/storage/innobase/include/row0upd.ic index 7e5f96e7e2b..da1c17caeb8 100644 --- a/storage/innobase/include/row0upd.ic +++ b/storage/innobase/include/row0upd.ic @@ -54,6 +54,7 @@ static inline upd_t *upd_create( update->fields = reinterpret_cast(&update[1]); update->heap = heap; update->per_stmt_heap = nullptr; + update->n_allocated_fields = n; for (ulint i = 0; i < n; ++i) { upd_field_t *uf = &update->fields[i]; diff --git a/storage/innobase/mtr/mtr0log.cc b/storage/innobase/mtr/mtr0log.cc index 077b0902ac3..b6256be554c 100644 --- a/storage/innobase/mtr/mtr0log.cc +++ b/storage/innobase/mtr/mtr0log.cc @@ -504,8 +504,10 @@ byte *mlog_parse_index_8027(byte *ptr, const byte *end_ptr, bool comp, } #ifndef UNIV_HOTBACKUP -/* logical_pos 2 bytes, phy_pos 2 bytes, v_added 1 byte, v_dropped 1 byte */ -constexpr size_t inst_col_info_size = 6; +/* logical_pos 2 bytes, phy_pos 2 bytes, v_added 1 byte, v_dropped 1 byte, +old_fixed_size 2 bytes, v_modified 1 bytes. Currently we don't support +modify instantly added column, but it can be extended in the future. */ +constexpr size_t inst_col_info_size = 6 + 3; /** Calculate total size needed to log index information. @param[in] index index @@ -525,7 +527,8 @@ static void log_index_get_size_needed(const dict_index_t *index, size_t size, _size += 2; size_t n_versioned_fields = ind->table->get_n_instant_add_cols() + - ind->table->get_n_instant_drop_cols(); + ind->table->get_n_instant_drop_cols() + + ind->table->instant_modified_cols_cnt; ut_ad(n_versioned_fields != 0); _size += n_versioned_fields * inst_col_info_size; @@ -696,7 +699,8 @@ static bool log_index_fields(const dict_index_t *index, uint16_t n, log_ptr += 2; if (is_versioned) { - if (col->is_instant_added() || col->is_instant_dropped()) { + if (col->is_instant_added() || col->is_instant_dropped() || + col->is_instant_modified()) { f.push_back(field); } } @@ -738,19 +742,34 @@ static bool log_index_versioned_fields(const std::vector &f, | 16th bit indicates add version info follows. */ uint16_t phy_pos = field->get_phy_pos(); - ut_ad(field->col->is_instant_added() || field->col->is_instant_dropped()); + ut_ad(field->col->is_instant_added() || field->col->is_instant_dropped() || + field->col->is_instant_modified()); + + ulint needed_bytes = 4; if (field->col->is_instant_added()) { /* Set 16th bit in phy_pos to indicate presence of version added */ phy_pos |= 0x8000; + /* 1 byte for v_added */ + needed_bytes += 1; } if (field->col->is_instant_dropped()) { /* Set 15th bit in phy_pos to indicate presence of version added */ phy_pos |= 0x4000; + /* 1 byte for v_dropped */ + needed_bytes += 1; + } + + if (field->col->is_instant_modified()) { + /* Set 14th bit in phy_pos to indicate presence of version modified */ + phy_pos |= 0x2000; + /* 2 bytes for old_fixed_size, 1 byte for v_modified */ + needed_bytes += 3; } + ut_ad(needed_bytes > 4); - if (!func(6)) { + if (!func(needed_bytes)) { return false; } @@ -771,6 +790,16 @@ static bool log_index_versioned_fields(const std::vector &f, mach_write_to_1(log_ptr, v); log_ptr += 1; } + + if (field->col->is_instant_modified()) { + uint8_t v = field->col->get_version_modified(); + uint16_t old_fixed_len = field->col->get_old_fixed_len_for_log( + dict_table_is_comp(index->table)); + mach_write_to_2(log_ptr, old_fixed_len); + log_ptr += 2; + mach_write_to_1(log_ptr, v); + log_ptr += 1; + } } return true; } @@ -1021,6 +1050,8 @@ struct Field_instant_info { uint16_t phy_pos{UINT16_UNDEFINED}; uint8_t v_added{UINT8_UNDEFINED}; uint8_t v_dropped{UINT8_UNDEFINED}; + uint16_t old_fixed_len{0}; + uint8_t v_modified{UINT8_UNDEFINED}; }; using instant_fields_list_t = std::vector; @@ -1069,6 +1100,18 @@ static byte *parse_index_versioned_fields(byte *ptr, const byte *end_ptr, n_dropped++; } + if ((info.phy_pos & 0x2000) != 0) { + info.phy_pos &= ~0x2000; + /* Read old_fixed_len */ + ptr = read_2_bytes(ptr, end_ptr, info.old_fixed_len); + if (ptr == nullptr) return (nullptr); + /* Read v_modified */ + ptr = read_1_bytes(ptr, end_ptr, info.v_modified); + if (ptr == nullptr) return (nullptr); + ut_ad(info.v_modified != UINT8_UNDEFINED && info.v_modified != 0); + crv = std::max(crv, (uint16_t)info.v_modified); + } + ut_ad((info.phy_pos & 0xC000) == 0); f.push_back(info); @@ -1089,11 +1132,13 @@ static void update_instant_info(instant_fields_list_t f, dict_index_t *index) { size_t n_added = 0; size_t n_dropped = 0; + size_t n_modified = 0; for (auto field : f) { bool is_added = field.v_added != UINT8_UNDEFINED; bool is_dropped = field.v_dropped != UINT8_UNDEFINED; - ut_ad(is_added || is_dropped); + bool is_modified = field.v_modified != UINT8_UNDEFINED; + ut_ad(is_added || is_dropped || is_modified); dict_col_t *col = index->fields[field.logical_pos].col; @@ -1111,12 +1156,19 @@ static void update_instant_info(instant_fields_list_t f, dict_index_t *index) { n_added++; } + if (is_modified) { + col->set_version_modified(field.v_modified); + col->set_old_type_from_log(field.old_fixed_len); + n_modified++; + } + col->set_phy_pos(field.phy_pos); } index->table->initial_col_count -= n_added; index->table->current_col_count -= n_dropped; index->table->n_cols -= n_dropped; + index->table->instant_modified_cols_cnt = n_modified; } /** To populate dummy fields. Used only in case of REDUNDANT row format. @@ -1278,7 +1330,8 @@ static byte *mlog_parse_index_v1(byte *ptr, const byte *end_ptr, phy_pos_bitmap[phy_pos] = true; } else { ut_ad(field->col->is_instant_added() || - field->col->is_instant_dropped()); + field->col->is_instant_dropped() || + field->col->is_instant_modified()); if (field->col->is_instant_added() && !field->col->is_instant_dropped()) { diff --git a/storage/innobase/page/page0cur.cc b/storage/innobase/page/page0cur.cc index ec77f2d0b19..f8c51574afd 100644 --- a/storage/innobase/page/page0cur.cc +++ b/storage/innobase/page/page0cur.cc @@ -934,7 +934,7 @@ static void page_cur_insert_rec_write_log( } /* If versions are different, then don't compare the records */ - if (cur_version != ins_version && cur_extra_size == extra_size) { + if (cur_version == ins_version && cur_extra_size == extra_size) { ulint min_rec_size = std::min(cur_rec_size, rec_size); const byte *cur_ptr = cursor_rec - cur_extra_size; diff --git a/storage/innobase/rem/rec.cc b/storage/innobase/rem/rec.cc index 34736836b62..09f703eedab 100644 --- a/storage/innobase/rem/rec.cc +++ b/storage/innobase/rem/rec.cc @@ -579,6 +579,8 @@ void rec_init_offsets_comp_ordinary(const rec_t *rec, bool temp, const dict_field_t *field = index->get_physical_field(i); const dict_col_t *col = field->col; uint64_t len; + dict_col_t old_col; + dict_field_t old_field; switch (rec_insert_state) { case INSERTED_INTO_TABLE_WITH_NO_INSTANT_NO_VERSION: @@ -618,6 +620,25 @@ void rec_init_offsets_comp_ordinary(const rec_t *rec, bool temp, len = rec_get_instant_offset(index, i, offs); goto resolved; + } else if (index->has_instant_modified_cols() && + col->is_modified_after(row_version)) { + ut_ad(!col->is_virtual()); + /* This column is instantly modified after row_version, we should use + old type for old record */ + old_col.mtype = col->old_mtype; + old_col.prtype = col->old_prtype; + old_col.len = col->old_len; + old_col.mbminmaxlen = col->old_mbminmaxlen; + col = &old_col; + + /* see more in dict_index_add_col */ + old_field.fixed_len = static_cast( + col->get_fixed_size(dict_table_is_comp(index->table))); + + if (old_field.fixed_len > DICT_MAX_FIXED_COL_LEN) { + old_field.fixed_len = 0; + } + field = &old_field; } } break; diff --git a/storage/innobase/rem/rec.h b/storage/innobase/rem/rec.h index fc4073426aa..bd7a17ed07d 100644 --- a/storage/innobase/rem/rec.h +++ b/storage/innobase/rem/rec.h @@ -1089,4 +1089,14 @@ void rec_init_offsets_comp_ordinary(const rec_t *rec, bool temp, REC_OLD_SHORT_SHIFT)); } +inline uint8_t rec_new_get_row_version(const rec_t *rec) { + if (!rec_new_is_versioned(rec)) { + return 0; + } + const byte *v_ptr = (rec - REC_N_NEW_EXTRA_BYTES - 1); + uint8_t version = (uint8_t)(*v_ptr); + ut_ad(is_valid_row_version(version)); + return version; +} + #endif diff --git a/storage/innobase/rem/rem0rec.cc b/storage/innobase/rem/rem0rec.cc index f940be8ae78..546722974f8 100644 --- a/storage/innobase/rem/rem0rec.cc +++ b/storage/innobase/rem/rem0rec.cc @@ -1309,9 +1309,9 @@ rec_t *rec_copy_prefix_to_buf(const rec_t *rec, const dict_index_t *index, ut_error; } + uint8_t row_version = UINT8_UNDEFINED; { uint16_t ndf = 0; - uint8_t row_version = UINT8_UNDEFINED; ut_d(enum REC_INSERT_STATE rec_ins_state =) rec_init_null_and_len_comp( rec, index, &nulls, &lens, &n_null, ndf, row_version); ut_ad(rec_ins_state != NONE); @@ -1330,10 +1330,30 @@ rec_t *rec_copy_prefix_to_buf(const rec_t *rec, const dict_index_t *index, for (i = 0; i < n_fields; i++) { const dict_field_t *field; const dict_col_t *col; + dict_col_t old_col; + dict_field_t old_field; field = index->get_field(i); col = field->col; + /* For modified column, the length and type should be restored + to old version if it's an old version rec. */ + if (row_version != UINT8_UNDEFINED && index->has_instant_modified_cols() && + col->is_modified_after(row_version)) { + ut_a(index->has_row_versions()); + old_col.mtype = col->old_mtype; + old_col.prtype = col->old_prtype; + old_col.len = col->old_len; + old_col.mbminmaxlen = col->old_mbminmaxlen; + col = &old_col; + old_field.fixed_len = static_cast( + col->get_fixed_size(dict_table_is_comp(index->table))); + if (old_field.fixed_len > DICT_MAX_FIXED_COL_LEN) { + old_field.fixed_len = 0; + } + field = &old_field; + } + if (!(col->prtype & DATA_NOT_NULL)) { /* nullable field => read the null flag */ if (UNIV_UNLIKELY(!(byte)null_mask)) { diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index f1109af187f..b40a9eab7c8 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -1279,6 +1279,13 @@ dberr_t row_import::match_table_columns(THD *thd) UNIV_NOTHROW { return (DB_ERROR); } + if (m_table->has_instant_modified_cols()) { + /* Now instant modified table doesn't support import. */ + ib_errf(thd, IB_LOG_LEVEL_ERROR, ER_TABLE_SCHEMA_MISMATCH, + "Import is not supported for instantly modified table"); + return (DB_ERROR); + } + if ((m_table->initial_col_count != m_initial_column_count) || (m_table->current_col_count != m_current_column_count) || (m_table->total_col_count != m_total_column_count)) { diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index 4bbbce5f112..89d713af760 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -1079,7 +1079,18 @@ static dberr_t row_log_table_get_pk_col(dict_index_t *index, dfield_set_data(dfield, blob_field, len); } else { - dfield_set_data(dfield, mem_heap_dup(heap, field, len), len); + dict_field_t *old_ifield = index->get_field(i); + if (index->has_instant_modified_cols() && + old_ifield->col->is_instant_modified()) { + /* For instantly modified colum, it needs to get the old field + from old index for converting it to newest type, since new + index has no any modified type information. */ + dfield_set_data_instant(old_ifield, dfield, + (const byte *)mem_heap_dup(heap, field, len), len, + heap); + } else { + dfield_set_data(dfield, mem_heap_dup(heap, field, len), len); + } } return (DB_SUCCESS); @@ -1432,7 +1443,12 @@ void row_log_table_blob_alloc( rw_lock_x_unlock(dict_index_get_lock(index)); } else { data = rec_get_nth_field_instant(mrec, offsets, i, index, &len); - dfield_set_data(dfield, data, len); + if (index->has_instant_modified_cols() && + ind_field->col->is_instant_modified()) { + dfield_set_data_instant(ind_field, dfield, data, len, heap); + } else { + dfield_set_data(dfield, data, len); + } } if (len != UNIV_SQL_NULL && col->mtype == DATA_MYSQL && col->len != len && @@ -2571,9 +2587,10 @@ flag_ok: } for (ulint i = 0; i < dict_index_get_n_unique(new_index) + 2; i++) { - const void *field; + const byte *field; ulint len; dfield_t *dfield; + const dict_field_t *ifield = new_index->get_field(i); ut_ad(!rec_offs_nth_extern(new_index, offsets, i)); @@ -2581,7 +2598,12 @@ flag_ok: ut_ad(rec_field_not_null_not_add_col_def(len)); dfield = dtuple_get_nth_field(old_pk, i); - dfield_set_data(dfield, field, len); + if (unlikely(new_index->has_instant_modified_cols() && + ifield->col->is_instant_modified())) { + dfield_set_data_instant(ifield, dfield, field, len, heap); + } else { + dfield_set_data(dfield, field, len); + } } mrec = next_mrec; diff --git a/storage/innobase/row/row0row.cc b/storage/innobase/row/row0row.cc index b2abc8d90e7..89506aa2f74 100644 --- a/storage/innobase/row/row0row.cc +++ b/storage/innobase/row/row0row.cc @@ -470,9 +470,15 @@ static inline dtuple_t *row_build_low(ulint type, const dict_index_t *index, field = rec_get_nth_field_instant(copy, offsets, i, index, &len); - dfield_set_data(dfield, field, len); + bool ext_field = rec_offs_nth_extern(index, offsets, i); + if (!ext_field && index->has_instant_modified_cols() && + col->is_instant_modified()) { + dfield_set_data_instant(ind_field, dfield, field, len, heap); + } else { + dfield_set_data(dfield, field, len); + } - if (rec_offs_nth_extern(index, offsets, i)) { + if (ext_field) { dfield_set_ext(dfield); col = col_table->get_col(col_no); @@ -572,6 +578,7 @@ dtuple_t *row_rec_to_index_entry_low( const byte *field; ulint len; ulint rec_len; + const dict_field_t *ifield; ut_ad(rec != nullptr); ut_ad(heap != nullptr); @@ -599,12 +606,19 @@ dtuple_t *row_rec_to_index_entry_low( for (i = 0; i < rec_len; i++) { dfield = dtuple_get_nth_field(entry, i); + ifield = index->get_field(i); field = rec_get_nth_field_instant(rec, offsets, i, index, &len); - dfield_set_data(dfield, field, len); + bool ext_field = rec_offs_nth_extern(index, offsets, i); + if (!ext_field && index->has_instant_modified_cols() && + ifield->col->is_instant_modified()) { + dfield_set_data_instant(ifield, dfield, field, len, heap); + } else { + dfield_set_data(dfield, field, len); + } - if (rec_offs_nth_extern(index, offsets, i)) { + if (ext_field) { dfield_set_ext(dfield); } } @@ -1346,3 +1360,135 @@ void test_row_raw_format_int() { #endif /* HAVE_UT_CHRONO_T */ #endif /* UNIV_ENABLE_UNIT_TEST_ROW_RAW_FORMAT_INT */ + +/* set data for instant old version record */ +void dfield_set_data_instant(const dict_field_t *ind_field, dfield_t *dfield, + const byte *field, ulint len, mem_heap_t *heap) { + ulint fixed_len = ind_field->fixed_len; + const dict_col_t *col = ind_field->col; + + /* char convert to varchar need trim */ + if ((col->len > len && col->mtype == DATA_VARCHAR && + col->old_mtype == DATA_CHAR && col->old_len == len) || + (col->len > len && col->mtype == DATA_BINARY && + col->old_mtype == DATA_FIXBINARY && col->old_len >= len) || + (col->len > len && col->mtype == DATA_VARMYSQL && + col->old_mtype == DATA_MYSQL && col->old_len >= len)) { + const byte *data = field; + ulint mbminlen; + ulint mbmaxlen; + + dtype_get_mblen(col->old_mtype, col->old_prtype, &mbminlen, &mbmaxlen); + + switch (mbminlen) { + default: + ut_error; + case 4: + /* space=0x00000020 */ + /* Trim "half-chars", just in case. */ + len &= ~3; + + while (len >= 4 && data[len - 4] == 0x00 && data[len - 3] == 0x00 && + data[len - 2] == 0x00 && data[len - 1] == 0x20) { + len -= 4; + } + break; + case 2: + /* space=0x0020 */ + /* Trim "half-chars", just in case. */ + len &= ~1; + + while (len >= 2 && data[len - 2] == 0x00 && data[len - 1] == 0x20) { + len -= 2; + } + break; + case 1: + /* space=0x20 */ + while (len > 0 && data[len - 1] == 0x20) { + len--; + } + } + } + + dfield_set_data(dfield, field, len); + + if (fixed_len > 0 && col->old_mtype != DATA_MTYPE_MAX && len < fixed_len && + col->mtype != DATA_MYSQL) { + byte *new_field = (byte *)mem_heap_alloc(heap, fixed_len); + /* char/varchar to char need pad */ + if (col->old_mtype != DATA_INT) { + ut_ad(col->old_mtype == DATA_VARCHAR || col->old_mtype == DATA_CHAR || + col->old_mtype == DATA_BINARY || col->old_mtype == DATA_FIXBINARY); + ut_ad(col->mtype == DATA_CHAR || col->mtype == DATA_FIXBINARY); + ut_ad(col->old_len <= fixed_len); + + memcpy(new_field, field, len); + + if (col->mtype == DATA_CHAR && + (col->old_mtype == DATA_CHAR || col->old_mtype == DATA_VARCHAR)) { + row_mysql_pad_col(DATA_MBMINLEN(col->mbminmaxlen), new_field + len, + fixed_len - len); + } else if (col->mtype == DATA_FIXBINARY && + (col->old_mtype == DATA_BINARY || + col->old_mtype == DATA_FIXBINARY)) { + memset(new_field + len, 0x0, fixed_len - len); + } + + } else { /* int to bigint */ + ut_ad(col->mtype == DATA_INT && col->old_mtype == DATA_INT); + ut_ad(col->len > col->old_len && fixed_len == col->len && + len == col->old_len); + + byte *end = new_field; + + /* 1: 0x80, 0x0, 0x0, 0x1 --> + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 */ + if (col->prtype & DATA_UNSIGNED) { + memset(end, 0x0, fixed_len - len); + end += fixed_len - len; + memcpy(end, field, len); + end += len; + } else if (field[0] & 0x80) { + memset(end, 0x0, fixed_len - len); + *end |= 0x80; + end += fixed_len - len; + memcpy(end, field, len); + *end &= 0x7F; + end += len; + } else { + /* -1: 0x7f, 0xff, 0xff, 0xff --> + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff */ + memset(end, 0xFF, fixed_len - len); + *end &= 0x7F; + end += fixed_len - len; + memcpy(end, field, len); + *end |= 0x80; + end += len; + } + } + + dfield_set_data(dfield, new_field, fixed_len); + } else if (len < col->len && col->mtype == DATA_MYSQL && + (col->old_mtype == DATA_MYSQL || + col->old_mtype == DATA_VARMYSQL)) { + ulint n_chars = col->len / DATA_MBMAXLEN(col->mbminmaxlen); + + /* see row_mysql_store_col_in_innobase_format */ + if (DATA_MBMINLEN(col->mbminmaxlen) == 1 && + DATA_MBMAXLEN(col->mbminmaxlen) > 1 && len <= n_chars) { + if (len < n_chars) { + byte *new_field = (byte *)mem_heap_alloc(heap, n_chars); + memcpy(new_field, field, len); + row_mysql_pad_col(DATA_MBMINLEN(col->mbminmaxlen), new_field + len, + n_chars - len); + dfield_set_data(dfield, new_field, n_chars); + } + } else { + byte *new_field = (byte *)mem_heap_alloc(heap, col->len); + memcpy(new_field, field, len); + row_mysql_pad_col(DATA_MBMINLEN(col->mbminmaxlen), new_field + len, + col->len - len); + dfield_set_data(dfield, new_field, col->len); + } + } +} diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index b3917453c6f..b2a9c085fb6 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -515,6 +515,7 @@ static void row_sel_fetch_columns(trx_t *trx, dict_index_t *index, if (needs_copy) { eval_node_copy_and_alloc_val(column, data, len); } else { + ut_ad(index->get_field(field_no)->col->old_mtype == DATA_MTYPE_MAX); val = que_node_get_val(column); dfield_set_data(val, data, len); } @@ -2499,13 +2500,13 @@ mysql_col_len, mbminlen, mbmaxlen range comparison. */ void row_sel_field_store_in_mysql_format_func( byte *dest, const mysql_row_templ_t *templ, const dict_index_t *index, - IF_DEBUG(ulint field_no, ) const byte *data, - ulint len IF_DEBUG(, ulint sec_field)) { + ulint field_no, const byte *data, ulint len IF_DEBUG(, ulint sec_field)) { byte *ptr; -#ifdef UNIV_DEBUG + const dict_field_t *field = templ->is_virtual ? nullptr : index->get_field(field_no); +#ifdef UNIV_DEBUG bool clust_templ_for_sec = (sec_field != ULINT_UNDEFINED); #endif /* UNIV_DEBUG */ ulint mysql_col_len = @@ -2525,6 +2526,35 @@ void row_sel_field_store_in_mysql_format_func( ptr = dest + len; + /* 1: 0x80, 0x0, 0x0, 0x1 --> + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80 + -1: 0x7f, 0xff, 0xff, 0xff --> + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f + -2: 0x7f, 0xff, 0xff, 0xfe --> + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f */ + /* pad and set thd new signed bit */ + if (field && templ->mysql_col_len != len) { + ulint pad_len = templ->mysql_col_len - len; + ut_ad(templ->mysql_col_len > len); + ut_ad(templ->mysql_col_len == field->col->len); + ut_ad(field->col->old_len < field->col->len && + field->col->old_mtype == DATA_INT); + + ptr = dest + templ->mysql_col_len; + if (templ->is_unsigned) { + memset(ptr - pad_len, 0x0, pad_len); + ptr -= pad_len; + } else if (data[0] & 0x80) { + memset(ptr - pad_len, 0x0, pad_len); + *(ptr - 1) |= 0x80; + ptr -= pad_len; + } else { + memset(ptr - pad_len, 0xFF, pad_len); + *(ptr - 1) &= 0x7F; + ptr -= pad_len; + } + } + for (;;) { ptr--; *ptr = *data; @@ -2534,11 +2564,28 @@ void row_sel_field_store_in_mysql_format_func( data++; } + /* reset the old signed bit */ + if (field != nullptr) { + if (templ->mysql_col_len != len && !templ->is_unsigned) { + ut_ad(templ->mysql_col_len > len); + ut_ad(templ->mysql_col_len == field->col->len); + ut_ad(field->col->old_len < field->col->len && + field->col->old_mtype == DATA_INT); + if (ptr[templ->mysql_col_len - 1] & 0x80) { + *(ptr + len - 1) &= 0x7f; + } else { + *(ptr + len - 1) |= 0x80; + } + } + } + if (!templ->is_unsigned) { - dest[len - 1] = (byte)(dest[len - 1] ^ 128); + dest[templ->mysql_col_len - 1] = + (byte)(dest[templ->mysql_col_len - 1] ^ 128); } - ut_ad(mysql_col_len == len); + ut_ad(templ->mysql_col_len == len || + (field == nullptr || field->col->old_mtype != DATA_MTYPE_MAX)); break; @@ -2548,6 +2595,43 @@ void row_sel_field_store_in_mysql_format_func( field_end = dest + mysql_col_len; if (templ->mysql_type == DATA_MYSQL_TRUE_VARCHAR) { + if (field && ((templ->mysql_col_len > len && + field->col->old_mtype == DATA_CHAR && + field->col->old_len == len) || + (templ->mysql_col_len > len && + field->col->old_mtype == DATA_MYSQL && + field->col->old_len >= len))) { + switch (templ->mbminlen) { + default: + ut_error; + case 4: + /* space=0x00000020 */ + /* Trim "half-chars", just in case. */ + len &= ~3; + + while (len >= 4 && data[len - 4] == 0x00 && + data[len - 3] == 0x00 && data[len - 2] == 0x00 && + data[len - 1] == 0x20) { + len -= 4; + } + break; + case 2: + /* space=0x0020 */ + /* Trim "half-chars", just in case. */ + len &= ~1; + + while (len >= 2 && data[len - 2] == 0x00 && + data[len - 1] == 0x20) { + len -= 2; + } + break; + case 1: + /* space=0x20 */ + while (len > 0 && data[len - 1] == 0x20) { + len--; + } + } + } /* This is a >= 5.0.3 type true VARCHAR. Store the length of the data to the first byte or the first two bytes of dest. */ @@ -2627,7 +2711,9 @@ void row_sel_field_store_in_mysql_format_func( clust_templ_for_sec. */ ut_ad(templ->is_virtual || templ->mbmaxlen > templ->mbminlen || mysql_col_len == len || clust_templ_for_sec || - (field_no == templ->icp_rec_field_no && field->prefix_len > 0)); + (field_no == templ->icp_rec_field_no && field->prefix_len > 0) || + (field && field->col->old_mtype != DATA_MTYPE_MAX && + field->col->old_len >= len)); /* The following assertion would fail for old tables containing UTF-8 ENUM columns due to Bug #9526. */ @@ -2636,6 +2722,10 @@ void row_sel_field_store_in_mysql_format_func( clust_templ_for_sec is true or if it is fetched from prefix virtual column in virtual index. */ ut_ad(templ->is_virtual || clust_templ_for_sec || + (field && field->col->old_mtype == DATA_MYSQL && + field->col->old_len >= len) || + (field && field->col->old_mtype == DATA_VARMYSQL && + field->col->old_len >= len) || len * templ->mbmaxlen >= mysql_col_len || index->has_row_versions() || (field_no == templ->icp_rec_field_no && field->prefix_len > 0)); @@ -2656,6 +2746,13 @@ void row_sel_field_store_in_mysql_format_func( string, because at least in this case,server should know it's a prefix index search and no complete value would be got. */ memset(dest + len, 0x20, mysql_col_len - len); + } else if (templ->mysql_col_len > len && field && + field->col->old_mtype != DATA_MTYPE_MAX) { + ut_ad(field->col->old_mtype == DATA_MYSQL || + field->col->old_mtype == DATA_VARMYSQL); + + row_mysql_pad_col(templ->mbminlen, dest + len, + templ->mysql_col_len - len); } break; @@ -2680,10 +2777,29 @@ void row_sel_field_store_in_mysql_format_func( happens for end range comparison. So length can vary according to secondary index record length. */ ut_ad((templ->is_virtual && !field) || - (field && field->prefix_len - ? field->prefix_len == len - : clust_templ_for_sec ? 1 : mysql_col_len == len)); + (field && field->prefix_len ? field->prefix_len == len + : clust_templ_for_sec + ? 1 + : (mysql_col_len == len || + (field && field->col->old_mtype != DATA_MTYPE_MAX)))); memcpy(dest, data, len); + if (templ->mysql_col_len > len && field && + field->col->old_mtype != DATA_MTYPE_MAX) { + ut_ad(field->col->old_mtype == DATA_CHAR || + field->col->old_mtype == DATA_VARCHAR || + field->col->old_mtype == DATA_BINARY || + field->col->old_mtype == DATA_FIXBINARY); + if (field->col->mtype == DATA_CHAR && + (field->col->old_mtype == DATA_CHAR || + field->col->old_mtype == DATA_VARCHAR)) { + row_mysql_pad_col(templ->mbminlen, dest + len, + templ->mysql_col_len - len); + } else if (field->col->mtype == DATA_FIXBINARY && + (field->col->old_mtype == DATA_BINARY || + field->col->old_mtype == DATA_FIXBINARY)) { + memset(dest + len, 0x0, templ->mysql_col_len - len); + } + } } } diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc index 27eec2828e4..cd8255a5e0b 100644 --- a/storage/innobase/row/row0upd.cc +++ b/storage/innobase/row/row0upd.cc @@ -428,6 +428,16 @@ bool row_upd_changes_field_size_or_external( rec_offs_nth_extern(index, offsets, upd_field->field_no)) { return true; } + /* after instantly modify char(2) -> vachar(4), old row is 'aa', + update 'aa' to 'bb' can not be inplace, because varchar(4) 'bb' should + have lens in record header */ + if (old_len == new_len) { + const dict_col_t *col = index->get_col(upd_field->field_no); + if (index->has_instant_modified_cols() && col->is_instant_modified() && + col->old_mtype != col->mtype) { + return true; + } + } } return false; diff --git a/storage/innobase/trx/trx0rec.cc b/storage/innobase/trx/trx0rec.cc index 328fc8dfacf..71fe5d19391 100644 --- a/storage/innobase/trx/trx0rec.cc +++ b/storage/innobase/trx/trx0rec.cc @@ -1727,6 +1727,7 @@ byte *trx_undo_update_rec_get_update(const byte *ptr, const dict_index_t *index, bool first_v_col = true; bool is_undo_log = true; ulint n_skip_field = 0; + const dict_field_t *ifield = nullptr; ut_a(index->is_clustered()); @@ -1843,7 +1844,18 @@ byte *trx_undo_update_rec_get_update(const byte *ptr, const dict_index_t *index, if (len == UNIV_SQL_NULL) { dfield_set_null(&upd_field->new_val); } else if (len < UNIV_EXTERN_STORAGE_FIELD) { - dfield_set_data(&upd_field->new_val, field, len); + if (!is_virtual) { + ifield = index->get_field(upd_field->field_no); + if (index->has_instant_modified_cols() && + ifield->col->is_instant_modified()) { + dfield_set_data_instant(ifield, &upd_field->new_val, field, len, + heap); + } else { + dfield_set_data(&upd_field->new_val, field, len); + } + } else { + dfield_set_data(&upd_field->new_val, field, len); + } } else { len -= UNIV_EXTERN_STORAGE_FIELD; @@ -2014,6 +2026,7 @@ byte *trx_undo_rec_get_partial_row( index->table->get_col(col_no)->copy_type(dfield_get_type(dfield)); } + ut_ad(!col->is_instant_modified()); dfield_set_data(dfield, field, len); if (len != UNIV_SQL_NULL && len >= UNIV_EXTERN_STORAGE_FIELD) { -- 2.36.1