mirror of
https://github.com/MariaDB/server.git
synced 2025-07-24 19:42:23 +03:00
stored externally row_merge_buf_add(): Has strict assert that fixed length mismatch shouldn't happen while rebuilding the redundant row format table btr_index_rec_validate(): Fixed size column can be stored externally. So sum of inline stored length and external stored length of the column should be equal to total column length
154 lines
8.1 KiB
Plaintext
154 lines
8.1 KiB
Plaintext
SET @row_format = @@GLOBAL.innodb_default_row_format;
|
|
####################################
|
|
# Check if table rebuilding alter isn't affect if table is created
|
|
# with explicit row_format
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ROW_FORMAT=COMPACT ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (1, 'abc');
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Compact # # # # # # NULL # # NULL latin1_swedish_ci NULL row_format=COMPACT 0 N
|
|
SET GLOBAL innodb_default_row_format=DYNAMIC;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD COLUMN c INT PRIMARY KEY;
|
|
# Here we expect COMPACT because it was explicitly specified at CREATE
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Compact # # # # # # NULL # # NULL latin1_swedish_ci NULL row_format=COMPACT 0 N
|
|
DROP TABLE t1;
|
|
####################################
|
|
# Check if table rebuilding alter is affected when there is no
|
|
# row_format specified at CREATE TABLE.
|
|
SET GLOBAL innodb_default_row_format = COMPACT;
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (1, 'abc');
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Compact # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
|
CREATE TABLE t2 (b VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL) ENGINE=InnoDB;
|
|
SET GLOBAL innodb_default_row_format = DYNAMIC;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD COLUMN c INT PRIMARY KEY;
|
|
# Here we expect DYNAMIC because there is no explicit ROW_FORMAT and the
|
|
# default_row_format is changed to DYNAMIC just before ALTER
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Dynamic # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
|
DROP TABLE t1;
|
|
ALTER TABLE t2 ADD INDEX(b);
|
|
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
|
ALTER TABLE t2 FORCE, ADD INDEX(b);
|
|
DROP TABLE t2;
|
|
####################################
|
|
# Check the row_format effect on ALTER, ALGORITHM=COPY
|
|
SET GLOBAL innodb_default_row_format = REDUNDANT;
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (1, REPEAT('abc',1000));
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Redundant # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
|
CREATE TABLE t2 (b VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL) ENGINE=InnoDB;
|
|
SET GLOBAL innoDB_default_row_format = COMPACT;
|
|
ALTER TABLE t1 ADD COLUMN c2 BLOB, ALGORITHM=COPY;
|
|
# Because of ALGORITHM=COPY, there is TABLE REBUILD and the table isn't
|
|
# created with explicit row_format, so we expect ROW_FORMAT=COMPACT
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Compact # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
|
DROP TABLE t1;
|
|
ALTER TABLE t2 ADD INDEX(b);
|
|
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
|
ALTER TABLE t2 FORCE, ADD INDEX(b);
|
|
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
|
SET GLOBAL innodb_default_row_format = DYNAMIC;
|
|
ALTER TABLE t2 ADD INDEX(b);
|
|
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
|
ALTER TABLE t2 FORCE, ADD INDEX(b);
|
|
DROP TABLE t2;
|
|
|
|
###################################
|
|
# Check the row_format effect on ALTER, ALGORITHM=COPY on
|
|
# create table with explicit row_format
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ROW_FORMAT=REDUNDANT ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (1, REPEAT('abc',1000));
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Redundant # # # # # # NULL # # NULL latin1_swedish_ci NULL row_format=REDUNDANT 0 N
|
|
SET GLOBAL innoDB_default_row_format = COMPACT;
|
|
ALTER TABLE t1 ADD COLUMN c2 BLOB, ALGORITHM=COPY;
|
|
# Because of ALGORITHM=COPY, there is TABLE REBUILD and the table is
|
|
# created with explicit row_format, so we expect original
|
|
# ROW_FORMAT=REDUNDANT
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Redundant # # # # # # NULL # # NULL latin1_swedish_ci NULL row_format=REDUNDANT 0 N
|
|
DROP TABLE t1;
|
|
|
|
##################################
|
|
# Check row_format on ALTER ALGORITHM=INPLACE
|
|
SET GLOBAL innodb_default_row_format=COMPACT;
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, KEY k1(b(10))) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (1, REPEAT('abc',1000));
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Compact # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
|
SET GLOBAL innodb_default_row_format=DYNAMIC;
|
|
ALTER TABLE t1 DROP INDEX k1;
|
|
# Because it is in-place operation, there is no rebuild, so the
|
|
# original format has to be retained.
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
|
t1 InnoDB # Compact # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
|
DROP TABLE t1;
|
|
#
|
|
# MDEV-24758 heap-use-after-poison in innobase_add_instant_try/rec_copy
|
|
#
|
|
CREATE TABLE t1 (pk INT PRIMARY KEY) CHARACTER SET utf8 ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1);
|
|
SET GLOBAL innodb_default_row_format = REDUNDANT;
|
|
ALTER TABLE t1 ADD a CHAR(8) DEFAULT '';
|
|
DROP TABLE t1;
|
|
SET GLOBAL innodb_default_row_format = @row_format;
|
|
# End of 10.3 tests
|
|
#
|
|
# MDEV-23295 Assertion fields[i].same(instant.fields[i]) failed
|
|
#
|
|
SET GLOBAL innodb_default_row_format = @row_format;
|
|
CREATE TABLE t1 (a char(8)) ENGINE=InnoDB DEFAULT CHARSET utf8;
|
|
SET GLOBAL innodb_default_row_format= COMPACT;
|
|
ALTER TABLE t1 ADD b INT;
|
|
SELECT ROW_FORMAT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1';
|
|
ROW_FORMAT
|
|
Dynamic
|
|
DROP TABLE t1;
|
|
#
|
|
# MDEV-23345 Assertion not_redundant() == old.not_redundant() failed
|
|
#
|
|
SET GLOBAL innodb_default_row_format = @row_format;
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, KEY(b)) ENGINE=InnoDB;
|
|
SET GLOBAL innodb_default_row_format= COMPACT;
|
|
ALTER TABLE t1 DROP b;
|
|
SELECT ROW_FORMAT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1';
|
|
ROW_FORMAT
|
|
Dynamic
|
|
DROP TABLE t1;
|
|
#
|
|
# MDEV-31025 Redundant table alter fails when fixed column
|
|
# stored externally
|
|
#
|
|
set @old_sql_mode = @@sql_mode;
|
|
SET @@sql_mode='';
|
|
CREATE TABLE t1(pk INT,c CHAR(255),c2 CHAR(255),c3 CHAR(255),
|
|
c4 char(255), c5 char(255), c6 char(255),
|
|
c7 char(255), c8 char(255), primary key(pk)
|
|
)Engine=InnoDB character set utf32 ROW_FORMAT=REDUNDANT;
|
|
INSERT INTO t1(pk, c) VALUES (1, repeat('a', 255));
|
|
ALTER TABLE t1 FORCE;
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
SELECT LENGTH(c) FROM t1;
|
|
LENGTH(c)
|
|
1020
|
|
DROP TABLE t1;
|
|
set @@sql_mode = @old_sql_mode;
|
|
# End of 10.4 tests
|
|
SET GLOBAL innodb_default_row_format = @row_format;
|