summaryrefslogtreecommitdiff
path: root/mysql-test/suite/innodb/t/innodb-page_compression_tables.test
blob: 75504a53c55ef7cd40c54aa3195a192d2362f4f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
--source include/have_innodb.inc
--source include/not_embedded.inc

let $innodb_compression_algorithm_orig=`SELECT @@innodb_compression_algorithm`;

# zlib
set global innodb_compression_algorithm = 1;

create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb;
create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact page_compressed=1;
create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic page_compressed=1;
--error 1005
create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed page_compressed=1;
show warnings;
show create table innodb_compact;
show create table innodb_dynamic;

# MDEV-7133: InnoDB: Assertion failure in thread 140737091569408 in file dict0mem.cc line 74 
# InnoDB: Failing assertion: dict_tf_is_valid(flags)
--error 1005
create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant page_compressed=1;
show warnings;
create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant;
show create table innodb_redundant;
--error ER_ILLEGAL_HA_CREATE_OPTION
alter table innodb_redundant page_compressed=1;
show warnings;
show create table innodb_redundant;
alter table innodb_redundant row_format=compact page_compressed=1;
show create table innodb_redundant;
drop table innodb_redundant;

delimiter //;
create procedure innodb_insert_proc (repeat_count int)
begin
  declare current_num int;
  set current_num = 0;
  while current_num < repeat_count do
    insert into innodb_normal values(current_num, substring(MD5(RAND()), -64));
    set current_num = current_num + 1;
  end while;
end//
delimiter ;//
commit;

set autocommit=0;
call innodb_insert_proc(5000);
commit;
set autocommit=1;

insert into innodb_compact select * from innodb_normal;
insert into innodb_dynamic select * from innodb_normal;

update innodb_compact set c1 = c1 + 1;
update innodb_dynamic set c1 = c1 + 1;
select count(*) from innodb_compact where c1 < 1500000;
select count(*) from innodb_dynamic where c1 < 1500000;

--source include/restart_mysqld.inc

update innodb_compact set c1 = c1 + 1;
update innodb_dynamic set c1 = c1 + 1;
select count(*) from innodb_compact where c1 < 1500000;
select count(*) from innodb_dynamic where c1 < 1500000;

# none
set global innodb_compression_algorithm = 0;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table innodb_compact page_compressed=DEFAULT, algorithm=instant;
alter table innodb_compact page_compressed=DEFAULT;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table innodb_dynamic page_compressed=DEFAULT, algorithm=instant;
alter table innodb_dynamic page_compressed=DEFAULT;
show create table innodb_compact;
show create table innodb_dynamic;

update innodb_compact set c1 = c1 + 1;
update innodb_dynamic set c1 = c1 + 1;
select count(*) from innodb_compact where c1 < 1500000;
select count(*) from innodb_dynamic where c1 < 1500000;

drop procedure innodb_insert_proc;
drop table innodb_normal;
drop table innodb_compact;
drop table innodb_dynamic;

# MDEV-9820 introducing variable for having page compression turned on by default on InnoDB tables
# test that innodb_compression_default works as expected, i.e. if it has a value of 1 (ON) tables are by default created with page_compressed=1;
CREATE TABLE no_compression (id INT NOT NULL, name VARCHAR(200)) ENGINE=InnoDB;
SET SESSION innodb_compression_default = 1;
CREATE TABLE default_compression (id INT NOT NULL, name VARCHAR(200)) ENGINE=InnoDB;
CREATE TABLE explicit_no_compression (id INT NOT NULL, name VARCHAR(200)) ENGINE=InnoDB PAGE_COMPRESSED=0;
SHOW CREATE TABLE no_compression;
SHOW CREATE TABLE default_compression;
SHOW CREATE TABLE explicit_no_compression;
DROP TABLE no_compression;
DROP TABLE default_compression;
DROP TABLE explicit_no_compression;
SET SESSION innodb_compression_default = 0;

# reset system
--disable_query_log
EVAL SET GLOBAL innodb_compression_algorithm = $innodb_compression_algorithm_orig;
--enable_query_log