Skip to content

Commit a12fb5d

Browse files
committed
Replace innodb_zip.16k with innodb_zip.page_size
Also, move part of the test back to innodb.innodb_mysql and another part to a new test innodb.purge. Last but not least, merge the tests innodb_zip.4k and innodb_zip.8k to innodb_zip.page_size.
1 parent 6ffaed6 commit a12fb5d

File tree

15 files changed

+2188
-1976
lines changed

15 files changed

+2188
-1976
lines changed

mysql-test/suite/innodb/r/innodb_mysql.result

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3134,8 +3134,49 @@ ERROR 22007: Incorrect datetime value: ''
31343134
DROP TABLE t1;
31353135
SET SQL_MODE=DEFAULT;
31363136
#
3137-
# Bug#56862 Moved to innodb_16k.test
3137+
# Bug#56862 Execution of a query that uses index merge returns a wrong result
31383138
#
3139+
CREATE TABLE t1 (
3140+
pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
3141+
a int,
3142+
b int,
3143+
INDEX idx(a))
3144+
ENGINE=INNODB;
3145+
INSERT INTO t1(a,b) VALUES
3146+
(11, 1100), (2, 200), (1, 100), (14, 1400), (5, 500),
3147+
(3, 300), (17, 1700), (4, 400), (12, 1200), (8, 800),
3148+
(6, 600), (18, 1800), (9, 900), (10, 1000), (7, 700),
3149+
(13, 1300), (15, 1500), (19, 1900), (16, 1600), (20, 2000);
3150+
INSERT INTO t1(a,b) SELECT a+20, b+2000 FROM t1;
3151+
INSERT INTO t1(a,b) SELECT a+40, b+4000 FROM t1;
3152+
INSERT INTO t1(a,b) SELECT a+80, b+8000 FROM t1;
3153+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
3154+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
3155+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
3156+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
3157+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
3158+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
3159+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
3160+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
3161+
INSERT INTO t1 VALUES (1000000, 0, 0);
3162+
set @optimizer_switch_saved=@@optimizer_switch;
3163+
SET SESSION optimizer_switch='derived_merge=off';
3164+
SET SESSION sort_buffer_size = 1024*36;
3165+
EXPLAIN
3166+
SELECT COUNT(*) FROM
3167+
(SELECT * FROM t1 FORCE INDEX (idx,PRIMARY)
3168+
WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
3169+
id select_type table type possible_keys key key_len ref rows Extra
3170+
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 1537
3171+
2 DERIVED t1 index_merge PRIMARY,idx idx,PRIMARY 5,4 NULL 1537 Using sort_union(idx,PRIMARY); Using where
3172+
SELECT COUNT(*) FROM
3173+
(SELECT * FROM t1 FORCE INDEX (idx,PRIMARY)
3174+
WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
3175+
COUNT(*)
3176+
1537
3177+
set @@optimizer_switch=@optimizer_switch_saved;
3178+
SET SESSION sort_buffer_size = DEFAULT;
3179+
DROP TABLE t1;
31393180
#
31403181
# Test for bug #39932 "create table fails if column for FK is in different
31413182
# case than in corr index".
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
SET @save_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency;
2+
SET GLOBAL innodb_purge_rseg_truncate_frequency=1;
3+
# Bug #12429576 - Test an assertion failure on purge.
4+
CREATE TABLE t1_purge (
5+
A int,
6+
B blob, C blob, D blob, E blob,
7+
F blob, G blob, H blob,
8+
PRIMARY KEY (B(767), C(767), D(767), E(767), A),
9+
INDEX (A)
10+
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
11+
INSERT INTO t1_purge VALUES (1,
12+
REPEAT('b', 766), REPEAT('c', 766), REPEAT('d', 766), REPEAT('e', 766),
13+
REPEAT('f', 766), REPEAT('g', 766), REPEAT('h', 766));
14+
CREATE TABLE t2_purge (
15+
A int PRIMARY KEY,
16+
B blob, C blob, D blob, E blob,
17+
F blob, G blob, H blob, I blob,
18+
J blob, K blob, L blob,
19+
INDEX (B(767))) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
20+
INSERT INTO t2_purge VALUES (1,
21+
REPEAT('b', 766), REPEAT('c', 766), REPEAT('d', 766), REPEAT('e', 766),
22+
REPEAT('f', 766), REPEAT('g', 766), REPEAT('h', 766), REPEAT('i', 766),
23+
REPEAT('j', 766), REPEAT('k', 766), REPEAT('l', 766));
24+
CREATE TABLE t3_purge (
25+
A int,
26+
B varchar(800), C varchar(800), D varchar(800), E varchar(800),
27+
F varchar(800), G varchar(800), H varchar(800),
28+
PRIMARY KEY (B(767), C(767), D(767), E(767), A),
29+
INDEX (A)
30+
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
31+
INSERT INTO t3_purge SELECT * FROM t1_purge;
32+
CREATE TABLE t4_purge (
33+
A int PRIMARY KEY,
34+
B varchar(800), C varchar(800), D varchar(800), E varchar(800),
35+
F varchar(800), G varchar(800), H varchar(800), I varchar(800),
36+
J varchar(800), K varchar(800), L varchar(800),
37+
INDEX (B(767))) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
38+
INSERT INTO t4_purge SELECT * FROM t2_purge;
39+
DELETE FROM t1_purge;
40+
DELETE FROM t2_purge;
41+
DELETE FROM t3_purge;
42+
DELETE FROM t4_purge;
43+
SET @r=REPEAT('a',500);
44+
CREATE TABLE t12637786(a int,
45+
v1 varchar(500), v2 varchar(500), v3 varchar(500),
46+
v4 varchar(500), v5 varchar(500), v6 varchar(500),
47+
v7 varchar(500), v8 varchar(500), v9 varchar(500),
48+
v10 varchar(500), v11 varchar(500), v12 varchar(500),
49+
v13 varchar(500), v14 varchar(500), v15 varchar(500),
50+
v16 varchar(500), v17 varchar(500), v18 varchar(500)
51+
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
52+
CREATE INDEX idx1 ON t12637786(a,v1);
53+
INSERT INTO t12637786 VALUES(9,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r);
54+
UPDATE t12637786 SET a=1000;
55+
DELETE FROM t12637786;
56+
# Bug#12963823 - Test that the purge thread does not crash when
57+
CREATE TABLE t12963823(a blob,b blob,c blob,d blob,e blob,f blob,g blob,h blob,
58+
i blob,j blob,k blob,l blob,m blob,n blob,o blob,p blob)
59+
ENGINE=innodb ROW_FORMAT=dynamic;
60+
SET @r = REPEAT('a', 767);
61+
INSERT INTO t12963823 VALUES (@r,@r,@r,@r, @r,@r,@r,@r, @r,@r,@r,@r, @r,@r,@r,@r);
62+
CREATE INDEX ndx_a ON t12963823 (a(500));
63+
CREATE INDEX ndx_b ON t12963823 (b(500));
64+
CREATE INDEX ndx_c ON t12963823 (c(500));
65+
CREATE INDEX ndx_d ON t12963823 (d(500));
66+
CREATE INDEX ndx_e ON t12963823 (e(500));
67+
CREATE INDEX ndx_f ON t12963823 (f(500));
68+
CREATE INDEX ndx_k ON t12963823 (k(500));
69+
CREATE INDEX ndx_l ON t12963823 (l(500));
70+
SET @r = REPEAT('b', 500);
71+
UPDATE t12963823 set a=@r,b=@r,c=@r,d=@r;
72+
UPDATE t12963823 set e=@r,f=@r,g=@r,h=@r;
73+
UPDATE t12963823 set i=@r,j=@r,k=@r,l=@r;
74+
UPDATE t12963823 set m=@r,n=@r,o=@r,p=@r;
75+
ALTER TABLE t12963823 DROP INDEX ndx_a;
76+
ALTER TABLE t12963823 DROP INDEX ndx_b;
77+
CREATE INDEX ndx_g ON t12963823 (g(500));
78+
CREATE INDEX ndx_h ON t12963823 (h(500));
79+
CREATE INDEX ndx_i ON t12963823 (i(500));
80+
CREATE INDEX ndx_j ON t12963823 (j(500));
81+
CREATE INDEX ndx_m ON t12963823 (m(500));
82+
CREATE INDEX ndx_n ON t12963823 (n(500));
83+
CREATE INDEX ndx_o ON t12963823 (o(500));
84+
CREATE INDEX ndx_p ON t12963823 (p(500));
85+
SHOW CREATE TABLE t12963823;
86+
Table Create Table
87+
t12963823 CREATE TABLE `t12963823` (
88+
`a` blob DEFAULT NULL,
89+
`b` blob DEFAULT NULL,
90+
`c` blob DEFAULT NULL,
91+
`d` blob DEFAULT NULL,
92+
`e` blob DEFAULT NULL,
93+
`f` blob DEFAULT NULL,
94+
`g` blob DEFAULT NULL,
95+
`h` blob DEFAULT NULL,
96+
`i` blob DEFAULT NULL,
97+
`j` blob DEFAULT NULL,
98+
`k` blob DEFAULT NULL,
99+
`l` blob DEFAULT NULL,
100+
`m` blob DEFAULT NULL,
101+
`n` blob DEFAULT NULL,
102+
`o` blob DEFAULT NULL,
103+
`p` blob DEFAULT NULL,
104+
KEY `ndx_c` (`c`(500)),
105+
KEY `ndx_d` (`d`(500)),
106+
KEY `ndx_e` (`e`(500)),
107+
KEY `ndx_f` (`f`(500)),
108+
KEY `ndx_k` (`k`(500)),
109+
KEY `ndx_l` (`l`(500)),
110+
KEY `ndx_g` (`g`(500)),
111+
KEY `ndx_h` (`h`(500)),
112+
KEY `ndx_i` (`i`(500)),
113+
KEY `ndx_j` (`j`(500)),
114+
KEY `ndx_m` (`m`(500)),
115+
KEY `ndx_n` (`n`(500)),
116+
KEY `ndx_o` (`o`(500)),
117+
KEY `ndx_p` (`p`(500))
118+
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
119+
InnoDB 0 transactions not purged
120+
DROP TABLE t1_purge, t2_purge, t3_purge, t4_purge, t12637786, t12963823;
121+
SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency;

mysql-test/suite/innodb/t/innodb_mysql.test

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -818,8 +818,52 @@ DROP TABLE t1;
818818
SET SQL_MODE=DEFAULT;
819819

820820
--echo #
821-
--echo # Bug#56862 Moved to innodb_16k.test
821+
--echo # Bug#56862 Execution of a query that uses index merge returns a wrong result
822822
--echo #
823+
824+
CREATE TABLE t1 (
825+
pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
826+
a int,
827+
b int,
828+
INDEX idx(a))
829+
ENGINE=INNODB;
830+
831+
INSERT INTO t1(a,b) VALUES
832+
(11, 1100), (2, 200), (1, 100), (14, 1400), (5, 500),
833+
(3, 300), (17, 1700), (4, 400), (12, 1200), (8, 800),
834+
(6, 600), (18, 1800), (9, 900), (10, 1000), (7, 700),
835+
(13, 1300), (15, 1500), (19, 1900), (16, 1600), (20, 2000);
836+
INSERT INTO t1(a,b) SELECT a+20, b+2000 FROM t1;
837+
INSERT INTO t1(a,b) SELECT a+40, b+4000 FROM t1;
838+
INSERT INTO t1(a,b) SELECT a+80, b+8000 FROM t1;
839+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
840+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
841+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
842+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
843+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
844+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
845+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
846+
INSERT INTO t1(a,b) SELECT a,b FROM t1;
847+
INSERT INTO t1 VALUES (1000000, 0, 0);
848+
849+
set @optimizer_switch_saved=@@optimizer_switch;
850+
SET SESSION optimizer_switch='derived_merge=off';
851+
SET SESSION sort_buffer_size = 1024*36;
852+
853+
EXPLAIN
854+
SELECT COUNT(*) FROM
855+
(SELECT * FROM t1 FORCE INDEX (idx,PRIMARY)
856+
WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
857+
858+
SELECT COUNT(*) FROM
859+
(SELECT * FROM t1 FORCE INDEX (idx,PRIMARY)
860+
WHERE a BETWEEN 2 AND 7 OR pk=1000000) AS t;
861+
862+
set @@optimizer_switch=@optimizer_switch_saved;
863+
SET SESSION sort_buffer_size = DEFAULT;
864+
865+
DROP TABLE t1;
866+
823867
--echo #
824868
--echo # Test for bug #39932 "create table fails if column for FK is in different
825869
--echo # case than in corr index".

mysql-test/suite/innodb/t/purge.test

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
--source include/have_innodb.inc
2+
--source include/have_innodb_16k.inc
3+
4+
SET @save_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency;
5+
SET GLOBAL innodb_purge_rseg_truncate_frequency=1;
6+
7+
--echo # Bug #12429576 - Test an assertion failure on purge.
8+
CREATE TABLE t1_purge (
9+
A int,
10+
B blob, C blob, D blob, E blob,
11+
F blob, G blob, H blob,
12+
PRIMARY KEY (B(767), C(767), D(767), E(767), A),
13+
INDEX (A)
14+
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
15+
16+
INSERT INTO t1_purge VALUES (1,
17+
REPEAT('b', 766), REPEAT('c', 766), REPEAT('d', 766), REPEAT('e', 766),
18+
REPEAT('f', 766), REPEAT('g', 766), REPEAT('h', 766));
19+
20+
CREATE TABLE t2_purge (
21+
A int PRIMARY KEY,
22+
B blob, C blob, D blob, E blob,
23+
F blob, G blob, H blob, I blob,
24+
J blob, K blob, L blob,
25+
INDEX (B(767))) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
26+
27+
INSERT INTO t2_purge VALUES (1,
28+
REPEAT('b', 766), REPEAT('c', 766), REPEAT('d', 766), REPEAT('e', 766),
29+
REPEAT('f', 766), REPEAT('g', 766), REPEAT('h', 766), REPEAT('i', 766),
30+
REPEAT('j', 766), REPEAT('k', 766), REPEAT('l', 766));
31+
32+
CREATE TABLE t3_purge (
33+
A int,
34+
B varchar(800), C varchar(800), D varchar(800), E varchar(800),
35+
F varchar(800), G varchar(800), H varchar(800),
36+
PRIMARY KEY (B(767), C(767), D(767), E(767), A),
37+
INDEX (A)
38+
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
39+
40+
INSERT INTO t3_purge SELECT * FROM t1_purge;
41+
42+
CREATE TABLE t4_purge (
43+
A int PRIMARY KEY,
44+
B varchar(800), C varchar(800), D varchar(800), E varchar(800),
45+
F varchar(800), G varchar(800), H varchar(800), I varchar(800),
46+
J varchar(800), K varchar(800), L varchar(800),
47+
INDEX (B(767))) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
48+
49+
INSERT INTO t4_purge SELECT * FROM t2_purge;
50+
51+
# This would trigger the failure (Bug #12429576)
52+
# if purge gets a chance to run before DROP TABLE t1_purge, ....
53+
DELETE FROM t1_purge;
54+
DELETE FROM t2_purge;
55+
DELETE FROM t3_purge;
56+
DELETE FROM t4_purge;
57+
# We need to activate the purge thread before DROP TABLE.
58+
59+
# Bug#12637786 - Assertion hit; ut_ad(dict_index_is_clust(index));
60+
# A secondary index tuple is found to be too long to fit into a page.
61+
# This test is not in innodb_8k or innodb_4k since the bug is not about
62+
# page size. It just tests the condition that caused the assertion.
63+
SET @r=REPEAT('a',500);
64+
CREATE TABLE t12637786(a int,
65+
v1 varchar(500), v2 varchar(500), v3 varchar(500),
66+
v4 varchar(500), v5 varchar(500), v6 varchar(500),
67+
v7 varchar(500), v8 varchar(500), v9 varchar(500),
68+
v10 varchar(500), v11 varchar(500), v12 varchar(500),
69+
v13 varchar(500), v14 varchar(500), v15 varchar(500),
70+
v16 varchar(500), v17 varchar(500), v18 varchar(500)
71+
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
72+
CREATE INDEX idx1 ON t12637786(a,v1);
73+
INSERT INTO t12637786 VALUES(9,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r);
74+
UPDATE t12637786 SET a=1000;
75+
DELETE FROM t12637786;
76+
# We need to activate the purge thread before DROP TABLE
77+
# to make sure it is able to clean up the old versions.
78+
79+
--echo # Bug#12963823 - Test that the purge thread does not crash when
80+
# the number of indexes has changed since the UNDO record was logged.
81+
# This test is not in innodb_8k or innodb_4k since the bug is not about
82+
# page size. It just tests the condition that caused the crash.
83+
CREATE TABLE t12963823(a blob,b blob,c blob,d blob,e blob,f blob,g blob,h blob,
84+
i blob,j blob,k blob,l blob,m blob,n blob,o blob,p blob)
85+
ENGINE=innodb ROW_FORMAT=dynamic;
86+
SET @r = REPEAT('a', 767);
87+
INSERT INTO t12963823 VALUES (@r,@r,@r,@r, @r,@r,@r,@r, @r,@r,@r,@r, @r,@r,@r,@r);
88+
CREATE INDEX ndx_a ON t12963823 (a(500));
89+
CREATE INDEX ndx_b ON t12963823 (b(500));
90+
CREATE INDEX ndx_c ON t12963823 (c(500));
91+
CREATE INDEX ndx_d ON t12963823 (d(500));
92+
CREATE INDEX ndx_e ON t12963823 (e(500));
93+
CREATE INDEX ndx_f ON t12963823 (f(500));
94+
CREATE INDEX ndx_k ON t12963823 (k(500));
95+
CREATE INDEX ndx_l ON t12963823 (l(500));
96+
97+
SET @r = REPEAT('b', 500);
98+
UPDATE t12963823 set a=@r,b=@r,c=@r,d=@r;
99+
UPDATE t12963823 set e=@r,f=@r,g=@r,h=@r;
100+
UPDATE t12963823 set i=@r,j=@r,k=@r,l=@r;
101+
UPDATE t12963823 set m=@r,n=@r,o=@r,p=@r;
102+
ALTER TABLE t12963823 DROP INDEX ndx_a;
103+
ALTER TABLE t12963823 DROP INDEX ndx_b;
104+
CREATE INDEX ndx_g ON t12963823 (g(500));
105+
CREATE INDEX ndx_h ON t12963823 (h(500));
106+
CREATE INDEX ndx_i ON t12963823 (i(500));
107+
CREATE INDEX ndx_j ON t12963823 (j(500));
108+
CREATE INDEX ndx_m ON t12963823 (m(500));
109+
CREATE INDEX ndx_n ON t12963823 (n(500));
110+
CREATE INDEX ndx_o ON t12963823 (o(500));
111+
CREATE INDEX ndx_p ON t12963823 (p(500));
112+
SHOW CREATE TABLE t12963823;
113+
# We need to activate the purge thread before DROP TABLE.
114+
115+
-- source include/wait_all_purged.inc
116+
DROP TABLE t1_purge, t2_purge, t3_purge, t4_purge, t12637786, t12963823;
117+
SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency;

0 commit comments

Comments
 (0)