1
0
mirror of https://github.com/MariaDB/server.git synced 2025-11-30 05:23:50 +03:00

MDEV-23497 Make ROW_FORMAT=COMPRESSED read-only by default

Let us introduce the parameter innodb_read_only_compressed
that is ON by default, making any ROW_FORMAT=COMPRESSED tables
read-only.

I developed the ROW_FORMAT=COMPRESSED format based on
Heikki Tuuri's rough design between 2005 and 2008. It might
have been a good idea back then, but no proper benchmarks were
ever run to validate the design or the implementation.

The format has been more or less obsolete for years.
It limits innodb_page_size to 16384 bytes (the default),
and instant ALTER TABLE is not supported.

This is the first step towards deprecating and removing
write support for ROW_FORMAT=COMPRESSED tables.
This commit is contained in:
Marko Mäkelä
2020-11-10 17:21:16 +02:00
parent c498250888
commit 9bc874a594
65 changed files with 396 additions and 192 deletions

View File

@@ -85,11 +85,20 @@ tab InnoDB # Compact # # # # # # NULL # NULL NULL latin1_swedish_ci NULL row_for
SELECT * FROM tab;
a b
1 Check with max column size
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=ON;
ALTER TABLE tab ROW_FORMAT=COMPRESSED;
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SET GLOBAL innodb_read_only_compressed=OFF;
ALTER TABLE tab ROW_FORMAT=COMPRESSED;
SET GLOBAL innodb_read_only_compressed=ON;
SELECT * FROM tab;
a b
1 Check with max column size
ALTER TABLE tab ROW_FORMAT=Dynamic;
Warnings:
Warning 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
SHOW TABLE STATUS LIKE 'tab';
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
tab InnoDB # Dynamic # # # # # # NULL # NULL NULL latin1_swedish_ci NULL row_format=DYNAMIC 0 N

View File

@@ -29,7 +29,7 @@ c71 char(200), c72 char(200), c73 char(200), c74 char(200), c75 char(200),
c76 char(200), c77 char(200), c78 char(200), c79 char(200), c80 char(200),
c81 char(63)
) ROW_FORMAT=compressed;
ERROR HY000: Can't create table `test`.`t1` (errno: 140 "Wrong create options")
Got one of the listed errors
CREATE TABLE t1 (a varchar(255) character set utf8,
b varchar(255) character set utf8,
c varchar(255) character set utf8,

View File

@@ -1,17 +0,0 @@
create table t1(a blob) engine=innodb key_block_size=8;
create function generate_blob()
returns varchar(20000)
begin
declare x varchar(20000) default '';
declare i int default 500;
while i > 0 do
set x = concat(sha1(i), x);
set i = i - 1;
end while;
return x;
end //
insert into t1 select generate_blob();
truncate t1;
insert into t1 select generate_blob();
drop table t1;
drop function generate_blob;

View File

@@ -199,7 +199,7 @@ create temporary table t1
(keyc int, c1 char(100), c2 char(100),
primary key(keyc), index sec_index(c1)
) engine = innodb key_block_size = 4;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
create temporary table t1
(keyc int, c1 char(100), c2 char(100),
primary key(keyc), index sec_index(c1)

View File

@@ -164,11 +164,11 @@ ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
create temporary table t (
i int)
engine = innodb row_format = compressed;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
create temporary table t (
i int)
engine = innodb row_format = compressed key_block_size = 8;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
create temporary table t (
i int)
engine = innodb row_format = dynamic;
@@ -201,7 +201,7 @@ drop table t;
create temporary table t (
i int)
engine = innodb row_format = compressed;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
#files in MYSQL_TMP_DIR, expecting only default temporary tablespace file
ibtmp1
create temporary table t (
@@ -473,19 +473,19 @@ CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
) ENGINE = InnoDB KEY_BLOCK_SIZE = 4;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
) ENGINE = InnoDB KEY_BLOCK_SIZE = 4, ROW_FORMAT = COMPACT;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
@@ -505,37 +505,37 @@ CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
) ENGINE = InnoDB KEY_BLOCK_SIZE = 4;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
) ENGINE = InnoDB ROW_FORMAT = COMPRESSED;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
) ENGINE = InnoDB ROW_FORMAT = COMPRESSED KEY_BLOCK_SIZE = 8;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
) ENGINE = InnoDB ROW_FORMAT = COMPRESSED KEY_BLOCK_SIZE = 7;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
@@ -555,22 +555,22 @@ CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY
) ENGINE = InnoDB ROW_FORMAT = REDUNDANT;
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
ALTER TABLE t1 KEY_BLOCK_SIZE = 4;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
ALTER TABLE t1 ROW_FORMAT = DYNAMIC KEY_BLOCK_SIZE = 4;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
ALTER TABLE t1 ROW_FORMAT = DYNAMIC;
set innodb_strict_mode = OFF;
@@ -613,10 +613,10 @@ Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED is ignored for TEMPORARY TABLE.
Warning 1478 InnoDB: assuming ROW_FORMAT=DYNAMIC.
set innodb_strict_mode = ON;
ALTER TABLE t1 ADD COLUMN j INT;
ERROR HY000: CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
ERROR HY000: InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
SHOW WARNINGS;
Level Code Message
Error 4047 CREATE TEMPORARY TABLE is not allowed with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Error 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
SHOW CREATE TABLE t1;
Table Create Table

View File

@@ -1,11 +1,15 @@
[COPY]
--alter_algorithm=copy
--skip-innodb-read-only-compressed
[INPLACE]
--alter_algorithm=inplace
--skip-innodb-read-only-compressed
[NOCOPY]
--alter_algorithm=nocopy
--skip-innodb-read-only-compressed
[INSTANT]
--alter_algorithm=instant
--skip-innodb-read-only-compressed

View File

@@ -2,6 +2,10 @@
# MDEV-11757 KEY_BLOCK_SIZE strangeness when UNCOMPRESSing COMPRESSed InnoDB tables
#
source include/have_innodb.inc;
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table t1 (
id1 bigint(20) not null,
@@ -17,6 +21,9 @@ SET innodb_strict_mode=OFF;
alter table t1 row_format=dynamic;
show create table t1;
SET innodb_strict_mode=ON;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
alter table t1 key_block_size=0;
show create table t1;
alter table t1 drop primary key, add primary key (id1),

View File

@@ -147,14 +147,22 @@ SHOW TABLE STATUS LIKE 'tab';
# Check by SELECT, no errors
SELECT * FROM tab;
# Check no errors
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=ON;
--error ER_UNSUPPORTED_COMPRESSED_TABLE
ALTER TABLE tab ROW_FORMAT=COMPRESSED;
SET GLOBAL innodb_read_only_compressed=OFF;
ALTER TABLE tab ROW_FORMAT=COMPRESSED;
SET GLOBAL innodb_read_only_compressed=ON;
# Check by SELECT, no errors
SELECT * FROM tab;
# Check no errors
ALTER TABLE tab ROW_FORMAT=Dynamic;
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
# Check no errors
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 #
SHOW TABLE STATUS LIKE 'tab';

View File

@@ -21,6 +21,10 @@ CREATE TABLE t1(c1 TEXT,c2 BLOB) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
SHOW TABLE STATUS LIKE 't1';
DROP TABLE t1;
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
CREATE TABLE t1(c1 TEXT,c2 BLOB) ENGINE=InnoDB
ROW_FORMAT=COMPRESSED;
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 #
@@ -28,6 +32,9 @@ SHOW TABLE STATUS LIKE 't1';
TRUNCATE TABLE t1;
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 #
SHOW TABLE STATUS LIKE 't1';
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
DROP TABLE t1;
--error 0,ER_CANT_CREATE_TABLE

View File

@@ -14,6 +14,11 @@ SELECT @@innodb_file_per_table;
SET SQL_MODE=strict_all_tables;
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
CREATE TABLE tab0 (c1 VARCHAR(65530), KEY(c1(3073))) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
SHOW CREATE TABLE tab0;
DROP TABLE tab0;
@@ -33,3 +38,7 @@ SELECT @@innodb_strict_mode;
CREATE TABLE tab1(c1 int ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
DROP TABLE tab1;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log

View File

@@ -1 +1,2 @@
--loose-innodb_sys_tablespaces
--skip-innodb-read-only-compressed

View File

@@ -1 +1,2 @@
--default_storage_engine=InnoDB
--skip-innodb-read-only-compressed

View File

@@ -20,7 +20,7 @@ SELECT variable_value FROM information_schema.global_status
SET SESSION innodb_strict_mode = ON;
--replace_regex /> [0-9]*/> max_row_size/
--error 1005
--error ER_CANT_CREATE_TABLE,ER_UNSUPPORTED_COMPRESSED_TABLE
CREATE TABLE t1 (
c01 char(200), c02 char(200), c03 char(200), c04 char(200), c05 char(200),
c06 char(200), c07 char(200), c08 char(200), c09 char(200), c10 char(200),

View File

@@ -617,6 +617,10 @@ eval DROP DATABASE $dest_db;
--echo # ORPHANED DUE TO RENAME TABLE
--echo #
CREATE DATABASE db1; USE db1;
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
CREATE TABLE notes (
id int(11) NOT NULL AUTO_INCREMENT,
body text COLLATE utf8_unicode_ci,
@@ -627,6 +631,9 @@ ROW_FORMAT=COMPRESSED;
ALTER TABLE notes ADD FULLTEXT INDEX index_ft_body (body(255));
DROP INDEX index_ft_body ON notes;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
CREATE DATABASE db2;
RENAME TABLE db1.notes TO db2.notes;

View File

@@ -35,6 +35,10 @@ DROP TABLE t1;
--echo # BTR_COPY_BLOB_PREFIX
--echo #
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
CREATE TABLE t1(f1 INT PRIMARY KEY, f3 LINESTRING NOT NULL,
SPATIAL KEY(f3))ENGINE=InnoDB ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=1;
@@ -58,5 +62,7 @@ let $linestr = $linestr 9999 9999);
--eval INSERT INTO t1 VALUES (1, ST_linefromtext(concat('linestring', '$linestr')));
ALTER TABLE t1 ROW_FORMAT = DYNAMIC, KEY_BLOCK_SIZE=0, ALGORITHM=INPLACE;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
DROP TABLE t1;

View File

@@ -5,6 +5,10 @@
# bzip2
set global innodb_compression_algorithm = 5;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table innodb_compressed(c1 int, b char(20)) engine=innodb row_format=compressed key_block_size=8;
show warnings;
create table innodb_normal (c1 int, b char(20)) engine=innodb;

View File

@@ -5,6 +5,10 @@
# lz4
set global innodb_compression_algorithm = 2;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table innodb_compressed(c1 int, b char(20)) engine=innodb row_format=compressed key_block_size=8;
show warnings;
create table innodb_normal (c1 int, b char(20)) engine=innodb;

View File

@@ -5,6 +5,10 @@
# lzma
set global innodb_compression_algorithm = 4;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table innodb_compressed(c1 int, b char(20)) engine=innodb row_format=compressed key_block_size=8;
show warnings;
create table innodb_normal (c1 int, b char(20)) engine=innodb;

View File

@@ -5,6 +5,10 @@
# lzo
set global innodb_compression_algorithm = 3;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table innodb_compressed(c1 int, b char(20)) engine=innodb row_format=compressed key_block_size=8;
show warnings;
create table innodb_normal (c1 int, b char(20)) engine=innodb;

View File

@@ -6,6 +6,10 @@
# zlib
set global innodb_compression_algorithm = 1;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table innodb_compressed(c1 int, b char(20)) engine=innodb row_format=compressed key_block_size=8;
show warnings;
create table innodb_normal (c1 int, b char(20)) engine=innodb;

View File

@@ -552,7 +552,10 @@ ib_unlink_tablespace("test", "t1");
EOF
DROP TABLE t1;
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
CREATE TABLE t1(
c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
c2 INT, INDEX idx(c2)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
@@ -1071,6 +1074,9 @@ SHOW CREATE TABLE t1;
SELECT * FROM t1;
DROP TABLE t1;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
call mtr.add_suppression("Got error -1 when reading table '.*'");
call mtr.add_suppression("InnoDB: Error: tablespace id and flags in file '.*'");

View File

@@ -1,32 +0,0 @@
--source include/have_innodb.inc
--source include/have_innodb_16k.inc
create table t1(a blob) engine=innodb key_block_size=8;
delimiter //;
create function generate_blob()
returns varchar(20000)
begin
declare x varchar(20000) default '';
declare i int default 500;
while i > 0 do
set x = concat(sha1(i), x);
set i = i - 1;
end while;
return x;
end //
delimiter ;//
insert into t1 select generate_blob();
let $x = `select 20000 - length(a) from t1`;
if ($x) {
echo Blob is truncated by $x bytes.;
die It must have been 20000 bytes.;
}
truncate t1;
insert into t1 select generate_blob();
let $x = `select 20000 - length(a) from t1`;
if ($x) {
echo Blob is truncated by $x bytes.;
die It must have been 20000 bytes.;
}
drop table t1;
drop function generate_blob;

View File

@@ -33,6 +33,10 @@ set global innodb_buffer_pool_size = 10485760;
select @@innodb_buffer_pool_size;
# fill buffer pool
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table t1 (id int not null, val int not null default '0', primary key (id)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
create or replace view view0 as select 1 union all select 1;
@@ -41,6 +45,9 @@ set @`v_val` := 0;
# 2^18 == 262144 records
replace into t1 select (@`v_id` := (@`v_id` + 4) mod 4294967296) as id, (@`v_val` := (@`v_val` + 4) mod 4294967296) as val from view0 v0, view0 v1, view0 v2, view0 v3, view0 v4, view0 v5, view0 v6, view0 v7, view0 v8, view0 v9, view0 v10, view0 v11, view0 v12, view0 v13, view0 v14, view0 v15, view0 v16, view0 v17;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
# Shrink buffer pool
set global innodb_buffer_pool_size = 7340032;

View File

@@ -24,6 +24,10 @@ if (`select (version() like '%debug%') > 0`)
select @@innodb_buffer_pool_chunk_size;
# fill buffer pool
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table t1 (id int not null, val int not null default '0', primary key (id)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
create or replace view view0 as select 1 union all select 1;
@@ -32,6 +36,9 @@ set @`v_val` := 0;
# 2^18 == 262144 records
replace into t1 select (@`v_id` := (@`v_id` + 4) mod 4294967296) as id, (@`v_val` := (@`v_val` + 4) mod 4294967296) as val from view0 v0, view0 v1, view0 v2, view0 v3, view0 v4, view0 v5, view0 v6, view0 v7, view0 v8, view0 v9, view0 v10, view0 v11, view0 v12, view0 v13, view0 v14, view0 v15, view0 v16, view0 v17;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
# Shrink buffer pool to 7MB
set global innodb_buffer_pool_size = 7340032;

View File

@@ -2,3 +2,4 @@
--innodb_buffer_pool_size=32M
--skip-innodb-stats-persistent
--innodb-sys-tablestats
--skip-innodb-read-only-compressed

View File

@@ -2,3 +2,4 @@
--innodb_buffer_pool_size=32M
--skip-innodb-stats-persistent
--innodb-sys-tablestats
--skip-innodb-read-only-compressed

View File

@@ -1,2 +1,3 @@
--innodb-file-per-table
--skip-innodb-doublewrite
--skip-innodb-read-only-compressed

View File

@@ -1,2 +1,2 @@
--innodb-file-per-table
--skip-innodb-read-only-compressed

View File

@@ -210,7 +210,10 @@ SELECT * FROM t1;
DROP TABLE t1;
--echo # End of 10.3 tests
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table t (
a varchar(9),
b int,
@@ -225,6 +228,9 @@ alter table t modify a varchar(10), algorithm=instant;
alter table t change b bb int, algorithm=instant;
alter table t modify c int without system versioning, algorithm=instant;
set @@system_versioning_alter_history = error;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
check table t;
drop table t;

View File

@@ -1,8 +1,18 @@
--source include/have_innodb.inc
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
create table t (a int NOT NULL) engine=innodb row_format= compressed;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
alter table t modify a int NULL, algorithm=instant;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
drop table t;
create table t (a int NOT NULL) engine=innodb row_format= dynamic;

View File

@@ -6,6 +6,9 @@
--echo # Bug#25330449 ASSERT SIZE==SPACE->SIZE DURING BUF_READ_AHEAD_RANDOM
let $MYSQLD_DATADIR=`SELECT @@datadir`;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=INNODB ROW_FORMAT=COMPRESSED;
--source include/shutdown_mysqld.inc

View File

@@ -1 +1,2 @@
--innodb-checksum-algorithm=crc32
--skip-innodb-read-only-compressed

View File

@@ -23,7 +23,7 @@ create temporary table t2
--source suite/innodb/include/dml_ops.inc
drop temporary table t1,t2;
#
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
create temporary table t1
(keyc int, c1 char(100), c2 char(100),
primary key(keyc), index sec_index(c1)

View File

@@ -181,12 +181,12 @@ eval $check_no_innodb;
--let $restart_parameters=
--source include/restart_mysqld.inc
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
create temporary table t (
i int)
engine = innodb row_format = compressed;
#
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
create temporary table t (
i int)
engine = innodb row_format = compressed key_block_size = 8;
@@ -211,7 +211,7 @@ show warnings;
set innodb_strict_mode = default;
#
drop table t;
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
create temporary table t (
i int)
engine = innodb row_format = compressed;
@@ -344,7 +344,7 @@ DROP TABLE t1;
# Set innodb_strict_mode=ON and test compressed temporary tables again.
set innodb_strict_mode = ON;
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
@@ -352,7 +352,7 @@ CREATE TEMPORARY TABLE t1 (
SHOW WARNINGS;
#
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
@@ -369,7 +369,7 @@ SHOW CREATE TABLE t1;
DROP TABLE t1;
#
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
@@ -377,7 +377,7 @@ CREATE TEMPORARY TABLE t1 (
SHOW WARNINGS;
#
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
@@ -385,7 +385,7 @@ CREATE TEMPORARY TABLE t1 (
SHOW WARNINGS;
#
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
@@ -393,7 +393,7 @@ CREATE TEMPORARY TABLE t1 (
SHOW WARNINGS;
#
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY,
c CHAR(10) NOT NULL
@@ -414,15 +414,15 @@ CREATE TEMPORARY TABLE t1 (
i INT NOT NULL PRIMARY KEY
) ENGINE = InnoDB ROW_FORMAT = REDUNDANT;
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
SHOW WARNINGS;
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
ALTER TABLE t1 KEY_BLOCK_SIZE = 4;
SHOW WARNINGS;
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
ALTER TABLE t1 ROW_FORMAT = DYNAMIC KEY_BLOCK_SIZE = 4;
SHOW WARNINGS;
@@ -450,7 +450,7 @@ SHOW WARNINGS;
set innodb_strict_mode = ON;
--error ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE
--error ER_UNSUPPORTED_COMPRESSED_TABLE
ALTER TABLE t1 ADD COLUMN j INT;
SHOW WARNINGS;
SHOW CREATE TABLE t1;

View File

@@ -19,10 +19,17 @@ DROP TABLE t;
--echo #
--echo # MDEV-17831 TRUNCATE TABLE removes ROW_FORMAT=COMPRESSED
--echo #
--disable_query_log
SET @save_innodb_read_only_compressed=@@GLOBAL.innodb_read_only_compressed;
SET GLOBAL innodb_read_only_compressed=OFF;
--enable_query_log
CREATE TABLE t1 (a SERIAL) ENGINE=InnoDB KEY_BLOCK_SIZE=4;
TRUNCATE TABLE t1;
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 # 13 #
SHOW TABLE STATUS;
--disable_query_log
SET GLOBAL innodb_read_only_compressed=@save_innodb_read_only_compressed;
--enable_query_log
DROP TABLE t1;
--echo #