699 lines
27 KiB
Plaintext
699 lines
27 KiB
Plaintext
#
|
|
# Test that INFORMATION_SCHEMA.INNODB_COLUMNS shows all the columns
|
|
# in a non-partitioned table
|
|
#
|
|
CREATE TABLE t_nopart (a int PRIMARY KEY, b int, c varchar(64));
|
|
SELECT lower(t.name), lower(c.name)
|
|
FROM INFORMATION_SCHEMA.INNODB_COLUMNS c
|
|
JOIN INFORMATION_SCHEMA.INNODB_TABLES t
|
|
WHERE t.table_id = c.table_id and t.name like '%t_nopart%'
|
|
ORDER BY t.name, c.name;
|
|
lower(t.name) lower(c.name)
|
|
test/t_nopart a
|
|
test/t_nopart b
|
|
test/t_nopart c
|
|
DROP TABLE t_nopart;
|
|
#
|
|
# Test that INFORMATION_SCHEMA.INNODB_COLUMNS shows columns for
|
|
# all the partitions in a partitioned table
|
|
#
|
|
CREATE TABLE t_part
|
|
(a int,
|
|
b int,
|
|
c varchar(64),
|
|
PRIMARY KEY (a),
|
|
KEY (b),
|
|
KEY (c,b))
|
|
ENGINE = InnoDB
|
|
PARTITION BY HASH (a) PARTITIONS 5;
|
|
SELECT lower(t.name), lower(c.name)
|
|
FROM INFORMATION_SCHEMA.INNODB_COLUMNS c
|
|
JOIN INFORMATION_SCHEMA.INNODB_TABLES t
|
|
WHERE t.table_id = c.table_id and t.name like '%t_part%'
|
|
ORDER BY t.name, c.name;
|
|
lower(t.name) lower(c.name)
|
|
test/t_part#p#p0 a
|
|
test/t_part#p#p0 b
|
|
test/t_part#p#p0 c
|
|
test/t_part#p#p1 a
|
|
test/t_part#p#p1 b
|
|
test/t_part#p#p1 c
|
|
test/t_part#p#p2 a
|
|
test/t_part#p#p2 b
|
|
test/t_part#p#p2 c
|
|
test/t_part#p#p3 a
|
|
test/t_part#p#p3 b
|
|
test/t_part#p#p3 c
|
|
test/t_part#p#p4 a
|
|
test/t_part#p#p4 b
|
|
test/t_part#p#p4 c
|
|
DROP TABLE t_part;
|
|
#
|
|
# Test that INFORMATION_SCHEMA.INNODB_COLUMNS shows columns for all
|
|
# the subpartitions of a table
|
|
#
|
|
CREATE TABLE t_subpart (a INT, b INT)
|
|
PARTITION BY RANGE(b)
|
|
SUBPARTITION BY HASH(b)
|
|
SUBPARTITIONS 2 (
|
|
PARTITION p0 VALUES LESS THAN (1000),
|
|
PARTITION p1 VALUES LESS THAN (2000),
|
|
PARTITION p2 VALUES LESS THAN MAXVALUE
|
|
);
|
|
SELECT lower(t.name), lower(c.name)
|
|
FROM INFORMATION_SCHEMA.INNODB_COLUMNS c
|
|
JOIN INFORMATION_SCHEMA.INNODB_TABLES t
|
|
WHERE t.table_id = c.table_id and t.name like '%t_subpart%'
|
|
ORDER BY t.name, c.name;
|
|
lower(t.name) lower(c.name)
|
|
test/t_subpart#p#p0#sp#p0sp0 a
|
|
test/t_subpart#p#p0#sp#p0sp0 b
|
|
test/t_subpart#p#p0#sp#p0sp1 a
|
|
test/t_subpart#p#p0#sp#p0sp1 b
|
|
test/t_subpart#p#p1#sp#p1sp0 a
|
|
test/t_subpart#p#p1#sp#p1sp0 b
|
|
test/t_subpart#p#p1#sp#p1sp1 a
|
|
test/t_subpart#p#p1#sp#p1sp1 b
|
|
test/t_subpart#p#p2#sp#p2sp0 a
|
|
test/t_subpart#p#p2#sp#p2sp0 b
|
|
test/t_subpart#p#p2#sp#p2sp1 a
|
|
test/t_subpart#p#p2#sp#p2sp1 b
|
|
DROP TABLE t_subpart;
|
|
#
|
|
# Test of optimizer estimates
|
|
#
|
|
CREATE TABLE t0 (a int PRIMARY KEY, b int, c varchar(64));
|
|
CREATE TABLE t1
|
|
(a int,
|
|
b int,
|
|
c varchar(64),
|
|
PRIMARY KEY (a),
|
|
KEY (b),
|
|
KEY (c,b))
|
|
ENGINE = InnoDB
|
|
PARTITION BY HASH (a) PARTITIONS 5;
|
|
# Set up the rows so that the following query would match
|
|
# 100 PK values but only 10 'b' values. But 90 of the matching
|
|
# PKs will be in the smallest partition.
|
|
# Since the fix for bug#1364811 will ha_partition only check the biggest
|
|
# partitions, but ha_innopart will check all partitions when estimating
|
|
# numbers of records in range. Resulting in ha_partition will
|
|
# assume there are only 10 matching PK values and choose to do search
|
|
# by PK but ha_innopart will search by secondary index 'b' since it
|
|
# will prefer to read 10 records from the secondary index over reading
|
|
# 100 records from the PRIMARY index.
|
|
# SELECT * FROM t1 WHERE a BETWEEN 1 AND 450 AND b BETWEEN 1 AND 10;
|
|
# Using t0 to prevent any issues with purge in t1.
|
|
INSERT INTO t0 VALUES (1,0,"common"),(2,0,"common"),(3,0,"common"),
|
|
(4,0,"common"),(5,0,"common"), (6,0,"common"),(7,0,"common"),(8,0,"common"),
|
|
(9,0,"common"),(10,0,"common");
|
|
INSERT INTO t0 SELECT a + 10, b, c FROM t0;
|
|
INSERT INTO t0 SELECT a + 20, b, c FROM t0;
|
|
INSERT INTO t0 SELECT a + 40, b, c FROM t0;
|
|
INSERT INTO t0 SELECT a + 80, b, c FROM t0;
|
|
INSERT INTO t0 SELECT a + 160, b, c FROM t0;
|
|
INSERT INTO t0 SELECT a + 320, b, c FROM t0;
|
|
INSERT INTO t0 SELECT a + 640, b, c FROM t0;
|
|
DELETE FROM t0 WHERE a BETWEEN 13 AND 450 AND (a % 5) <> 0;
|
|
DELETE FROM t0 WHERE a > 450 AND (a % 5) = 0 LIMIT 250;
|
|
UPDATE t0 SET b = a, c = "MATCH!" WHERE a <= 10;
|
|
INSERT INTO t1 SELECT * FROM t0;
|
|
DROP TABLE t0;
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
EXPLAIN SELECT * FROM t1 WHERE a BETWEEN 1 AND 450 AND b BETWEEN 1 AND 10;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 p0,p1,p2,p3,p4 range PRIMARY,b,c b 9 NULL 10 13.09 Using index condition
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where ((`test`.`t1`.`a` between 1 and 450) and (`test`.`t1`.`b` between 1 and 10))
|
|
SELECT * FROM performance_schema.session_status
|
|
WHERE VARIABLE_NAME LIKE 'dummy';
|
|
VARIABLE_NAME VARIABLE_VALUE
|
|
FLUSH STATUS;
|
|
SELECT * FROM t1 WHERE a BETWEEN 1 AND 450 AND b BETWEEN 1 AND 10;
|
|
a b c
|
|
1 1 MATCH!
|
|
10 10 MATCH!
|
|
2 2 MATCH!
|
|
3 3 MATCH!
|
|
4 4 MATCH!
|
|
5 5 MATCH!
|
|
6 6 MATCH!
|
|
7 7 MATCH!
|
|
8 8 MATCH!
|
|
9 9 MATCH!
|
|
VARIABLE_NAME VARIABLE_VALUE
|
|
Handler_commit 1
|
|
Handler_external_lock 3
|
|
Handler_read_key 5
|
|
Handler_read_next 10
|
|
DROP TABLE t1;
|
|
# Test of index_merge and delete
|
|
CREATE TABLE `t1` (
|
|
`a` int(11) NOT NULL,
|
|
`b` int(11) NOT NULL,
|
|
KEY `a` (`a`),
|
|
KEY `b` (`b`)
|
|
)
|
|
/*!50100 PARTITION BY HASH (a)
|
|
PARTITIONS 3 */;
|
|
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 (0,0),(0,0),(1,0),(1,0),(2,0),(2,0),(0,0);
|
|
INSERT INTO t1 SELECT t1.a,t1.b FROM t1, t1 t2;
|
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
EXPLAIN SELECT * FROM t1 WHERE a = 4 OR b > 0;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 p0,p1,p2 index_merge a,b a,b 4,4 NULL # 100.00 Using sort_union(a,b); Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`a` = 4) or (`test`.`t1`.`b` > 0))
|
|
EXPLAIN DELETE FROM t1 WHERE a = 4 OR b > 0;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 DELETE t1 p0,p1,p2 index_merge a,b a,b 4,4 NULL # 100.00 Using sort_union(a,b); Using where
|
|
Warnings:
|
|
Note 1003 delete from `test`.`t1` where ((`test`.`t1`.`a` = 4) or (`test`.`t1`.`b` > 0))
|
|
SELECT * FROM t1 WHERE a = 4 OR b > 0;
|
|
a b
|
|
1 1
|
|
2 2
|
|
SELECT COUNT(*) FROM t1;
|
|
COUNT(*)
|
|
58
|
|
DELETE FROM t1 WHERE a = 4 OR b > 0;
|
|
SELECT COUNT(*) FROM t1;
|
|
COUNT(*)
|
|
56
|
|
SELECT * FROM t1 WHERE a = 4 OR b > 0;
|
|
a b
|
|
DROP TABLE t1;
|
|
# more testing of index_merge and delete
|
|
CREATE TABLE t1
|
|
(a int not null,
|
|
b int not null,
|
|
INDEX(a),
|
|
INDEX(b))
|
|
engine=InnoDB
|
|
PARTITION BY KEY(a,b) PARTITIONS 5;
|
|
INSERT INTO t1 VALUES (0,0),(1,1), (2,2), (3,3), (4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
|
INSERT INTO t1 SELECT a + 10, b + 10 FROM t1;
|
|
INSERT INTO t1 SELECT a + 20, b + 20 FROM t1;
|
|
INSERT INTO t1 SELECT a + 40, b + 40 FROM t1;
|
|
INSERT INTO t1 SELECT a + 80, b + 80 FROM t1;
|
|
INSERT INTO t1 SELECT a + 160, b + 160 FROM t1;
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
EXPLAIN SELECT * FROM t1 WHERE a = 4 OR b < 3;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 p0,p1,p2,p3,p4 index_merge a,b a,b 4,4 NULL # 100.00 Using sort_union(a,b); Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`a` = 4) or (`test`.`t1`.`b` < 3))
|
|
SELECT * FROM t1 WHERE a = 4 OR b < 3;
|
|
a b
|
|
0 0
|
|
1 1
|
|
2 2
|
|
4 4
|
|
EXPLAIN SELECT * FROM t1 WHERE a BETWEEN 0 AND 20 OR b BETWEEN 10 AND 20;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 p0,p1,p2,p3,p4 index_merge a,b a,b 4,4 NULL # 100.00 Using sort_union(a,b); Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`a` between 0 and 20) or (`test`.`t1`.`b` between 10 and 20))
|
|
SELECT * FROM t1 WHERE a BETWEEN 0 AND 20 OR b BETWEEN 10 AND 20;
|
|
a b
|
|
0 0
|
|
1 1
|
|
2 2
|
|
3 3
|
|
4 4
|
|
5 5
|
|
6 6
|
|
7 7
|
|
8 8
|
|
9 9
|
|
15 15
|
|
10 10
|
|
12 12
|
|
17 17
|
|
18 18
|
|
19 19
|
|
11 11
|
|
16 16
|
|
14 14
|
|
13 13
|
|
20 20
|
|
EXPLAIN DELETE FROM t1 WHERE a = 4 OR b < 3;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 DELETE t1 p0,p1,p2,p3,p4 index_merge a,b a,b 4,4 NULL # 100.00 Using sort_union(a,b); Using where
|
|
Warnings:
|
|
Note 1003 delete from `test`.`t1` where ((`test`.`t1`.`a` = 4) or (`test`.`t1`.`b` < 3))
|
|
DELETE FROM t1 WHERE a = 4 OR b < 3;
|
|
EXPLAIN DELETE FROM t1 WHERE a BETWEEN 0 AND 20 OR b BETWEEN 10 AND 20;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 DELETE t1 p0,p1,p2,p3,p4 index_merge a,b a,b 4,4 NULL # 100.00 Using sort_union(a,b); Using where
|
|
Warnings:
|
|
Note 1003 delete from `test`.`t1` where ((`test`.`t1`.`a` between 0 and 20) or (`test`.`t1`.`b` between 10 and 20))
|
|
SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
|
|
QUERY TRACE MISSING_BYTES_BEYOND_MAX_MEM_SIZE INSUFFICIENT_PRIVILEGES
|
|
DELETE FROM t1 WHERE a BETWEEN 0 AND 20 OR b BETWEEN 10 AND 20;
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#20584754: CAN'T FIND RECORD IN 'TABLE100_KEY_PK_PARTS_2_DATETIME_3'
|
|
#
|
|
CREATE TABLE `t1` (
|
|
`c1` tinyint unsigned DEFAULT NULL,
|
|
`c2` char(1) DEFAULT NULL,
|
|
`pk` tinyint NOT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `c1` (`c1`),
|
|
KEY `c2` (`c2`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY HASH (pk)
|
|
PARTITIONS 2 */;
|
|
# Create the dataset in a separate table, so it can be loaded
|
|
# directly without update/delete which may give unstable EXPLAIN
|
|
# due to background pruning.
|
|
CREATE TABLE t0
|
|
(a tinyint not null auto_increment primary key,
|
|
b char(1) DEFAULT 'a',
|
|
c tinyint DEFAULT 1);
|
|
INSERT INTO t0 (a) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
|
|
INSERT INTO t0 (a) SELECT NULL FROM t0, t0 t0_2 LIMIT 50;
|
|
UPDATE t0 SET c = NULL WHERE a IN (2,3,6,13,18);
|
|
INSERT INTO t1 SELECT c,b,a FROM t0;
|
|
DROP TABLE t0;
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
EXPLAIN SELECT
|
|
pk
|
|
FROM `t1`
|
|
WHERE `c1` IS NULL OR `c2` = '0';
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 p0,p1 index_merge c1,c2 c1,c2 2,2 NULL # 100.00 Using union(c1,c2); Using where
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` where ((`test`.`t1`.`c1` is null) or (`test`.`t1`.`c2` = '0'))
|
|
SELECT
|
|
pk
|
|
FROM `t1`
|
|
WHERE `c1` IS NULL OR `c2` = '0';
|
|
pk
|
|
2
|
|
3
|
|
6
|
|
13
|
|
18
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#20516390: PARTITIONED TABLE, TBLSPACE MOVE, ALTER, ASSERT
|
|
# !(M_FILE_PER_TABLE && M_USE_SHAR
|
|
#
|
|
CREATE TABLE t1
|
|
(a int not null,
|
|
d int not null,
|
|
b varchar(198) not null,
|
|
c varchar(177),
|
|
index(d),
|
|
index(a),
|
|
PRIMARY KEY (b(10), a, d),
|
|
INDEX (c(95), b(95)),
|
|
INDEX (b(5), c(10), a))
|
|
ENGINE=InnoDB stats_persistent=DEFAULT
|
|
PARTITION BY LINEAR HASH(d) PARTITIONS 2;
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ALGORITHM=DEFAULT;
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug #20593808: CRASH WITH PARTITIONED TABLES
|
|
# MULTITABLE DELETE
|
|
#
|
|
Test DML with index scan on partitioned table
|
|
#1. test delete with join using PK index scan on partitioned table
|
|
CREATE TABLE t1 (
|
|
col_1_int int,
|
|
col_2_text text)
|
|
ENGINE=InnoDB;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`col_1_int` int(11) DEFAULT NULL,
|
|
`col_2_text` text
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
#insert two records in t1
|
|
INSERT INTO t1 VALUES (5, 'row to delete');
|
|
INSERT INTO t1 VALUES (3, 'row to keep');
|
|
SELECT * FROM t1 ORDER BY col_1_int;
|
|
col_1_int col_2_text
|
|
3 row to keep
|
|
5 row to delete
|
|
CREATE TABLE t2 (
|
|
col_1_int int,
|
|
col_2_int int,
|
|
col_3_text text,
|
|
PRIMARY KEY(col_1_int, col_3_text(100)),
|
|
KEY idx1 (col_2_int, col_1_int))
|
|
ENGINE=InnoDB
|
|
PARTITION BY KEY(col_1_int) partitions 5;
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`col_1_int` int(11) NOT NULL,
|
|
`col_2_int` int(11) DEFAULT NULL,
|
|
`col_3_text` text NOT NULL,
|
|
PRIMARY KEY (`col_1_int`,`col_3_text`(100)),
|
|
KEY `idx1` (`col_2_int`,`col_1_int`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
/*!50100 PARTITION BY KEY (col_1_int)
|
|
PARTITIONS 5 */
|
|
#insert five records in t2
|
|
INSERT INTO t2 VALUES (91, 11, 'bigger value for no-op');
|
|
INSERT INTO t2 VALUES ( 4, 25, 'smaller value to trigger delete');
|
|
INSERT INTO t2 VALUES (35, 33, 'bigger value for no-op addlen');
|
|
INSERT INTO t2 VALUES (55, 42, 'bigger value for no-op addlen + addlen + addlen');
|
|
INSERT INTO t2 VALUES (82, 54, 'bigger value for no-op addlen + addlen');
|
|
SELECT * FROM t2 ORDER BY col_1_int;
|
|
col_1_int col_2_int col_3_text
|
|
4 25 smaller value to trigger delete
|
|
35 33 bigger value for no-op addlen
|
|
55 42 bigger value for no-op addlen + addlen + addlen
|
|
82 54 bigger value for no-op addlen + addlen
|
|
91 11 bigger value for no-op
|
|
# test delete with join and index scan
|
|
DELETE t1 FROM t2, t1 WHERE t2.col_1_int <= t1.col_1_int;
|
|
expect one record
|
|
SELECT * FROM t1;
|
|
col_1_int col_2_text
|
|
3 row to keep
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
#2. test delete with join using secondary index scan on partitioned table
|
|
CREATE TABLE t1 (
|
|
col_1_int int,
|
|
col_2_text text)
|
|
ENGINE=InnoDB;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`col_1_int` int(11) DEFAULT NULL,
|
|
`col_2_text` text
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
#insert two records in t1
|
|
INSERT INTO t1 VALUES (5, 'row to delete');
|
|
INSERT INTO t1 VALUES (3, 'row to keep');
|
|
SELECT * FROM t1 ORDER BY col_1_int;
|
|
col_1_int col_2_text
|
|
3 row to keep
|
|
5 row to delete
|
|
CREATE TABLE t2 (
|
|
col_1_int int,
|
|
col_2_int int,
|
|
col_3_text text,
|
|
PRIMARY KEY(col_2_int, col_1_int),
|
|
KEY idx1(col_1_int, col_3_text(100)))
|
|
ENGINE=InnoDB
|
|
PARTITION BY KEY(col_2_int) partitions 5;
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`col_1_int` int(11) NOT NULL,
|
|
`col_2_int` int(11) NOT NULL,
|
|
`col_3_text` text,
|
|
PRIMARY KEY (`col_2_int`,`col_1_int`),
|
|
KEY `idx1` (`col_1_int`,`col_3_text`(100))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
/*!50100 PARTITION BY KEY (col_2_int)
|
|
PARTITIONS 5 */
|
|
#insert five records in t2
|
|
INSERT INTO t2 VALUES (91, 11, 'bigger value for no-op');
|
|
INSERT INTO t2 VALUES ( 4, 25, 'smaller value to trigger delete');
|
|
INSERT INTO t2 VALUES (35, 33, 'bigger value for no-op addlen');
|
|
INSERT INTO t2 VALUES (55, 42, 'bigger value for no-op addlen + addlen + addlen');
|
|
INSERT INTO t2 VALUES (82, 54, 'bigger value for no-op addlen + addlen');
|
|
SELECT * FROM t2 ORDER BY col_1_int;
|
|
col_1_int col_2_int col_3_text
|
|
4 25 smaller value to trigger delete
|
|
35 33 bigger value for no-op addlen
|
|
55 42 bigger value for no-op addlen + addlen + addlen
|
|
82 54 bigger value for no-op addlen + addlen
|
|
91 11 bigger value for no-op
|
|
# test delete with join and index scan
|
|
DELETE t1 FROM t2, t1 WHERE t2.col_1_int <= t1.col_1_int;
|
|
expect one record
|
|
SELECT * FROM t1;
|
|
col_1_int col_2_text
|
|
3 row to keep
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
#
|
|
# Bug #20949314: PARTITION_HELPER::PH_RND_INIT(BOOL): ASSERTION
|
|
#
|
|
CREATE TABLE t1 (c1 INT);
|
|
INSERT INTO t1 VALUES (3), (4), (5), (1), (2);
|
|
CREATE TABLE t2 PARTITION BY KEY (c1) PARTITIONS 3
|
|
AS
|
|
SELECT * FROM t1;
|
|
DELETE A FROM t1 AS A WHERE A.c1 IN
|
|
(SELECT c1 FROM t2 AS B WHERE B.c1 = A.c1);
|
|
SELECT * from t1;
|
|
c1
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
#
|
|
# Bug#21211524: CRASH IN ACTUAL_KEY_PARTS WITH PARTITIONED TABLES
|
|
#
|
|
CREATE TABLE t1(
|
|
col1 SET('') CHARACTER SET UTF16 COLLATE UTF16_SPANISH_CI,
|
|
col2 INT,
|
|
PRIMARY KEY (col2, col1),
|
|
UNIQUE KEY (col1, col2))
|
|
ENGINE=INNODB
|
|
PARTITION BY KEY (col1);
|
|
SELECT * from t1 WHERE col1 BETWEEN 0x92 AND "";
|
|
col1 col2
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#21794110: ASSERTION `MP->COUNT > 0 && MY_THREAD_EQUAL
|
|
#
|
|
CREATE TABLE t1(col1 INT PRIMARY KEY, col2 CHAR(10))
|
|
ENGINE=INNODB
|
|
PARTITION BY HASH(col1) PARTITIONS 2;
|
|
INSERT INTO t1 VALUES(0, 'string1');
|
|
ALTER TABLE t1 CHANGE col1 col1 INT UNSIGNED AUTO_INCREMENT;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`col1` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`col2` char(10) DEFAULT NULL,
|
|
PRIMARY KEY (`col1`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
|
|
/*!50100 PARTITION BY HASH (`col1`)
|
|
PARTITIONS 2 */
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#21620577: ASSERTION H->ACTIVE_INDEX == 64
|
|
#
|
|
CREATE TABLE t1(col1 YEAR(4) not null, col2 int, KEY(col1), KEY(col1, col2))
|
|
ENGINE=INNODB
|
|
PARTITION BY KEY(col1) PARTITIONS 2;
|
|
INSERT INTO t1 VALUES('2015', 10);
|
|
SELECT /*+ bka()*/ a.col2 from t1 AS a
|
|
RIGHT JOIN t1 AS b on a.col1<=>null
|
|
RIGHT JOIN t1 AS c on 1;
|
|
col2
|
|
NULL
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#21754608: HANDLE_FATAL_SIGNAL PARTITION_HELPER::PH_READ_RANGE_FIRST
|
|
#
|
|
CREATE TABLE t1(col1 int PRIMARY KEY, col2 int, col3 int)
|
|
ENGINE=INNODB
|
|
PARTITION BY LIST(col1) PARTITIONS 2
|
|
(PARTITION p0 VALUES IN (11,12),
|
|
PARTITION p1 VALUES IN (0,1));
|
|
INSERT INTO t1 values(1, 10, 100);
|
|
SELECT * from t1 WHERE col1 BETWEEN '2000-01-01 01:02:00' AND '2000-01-01 01:03:00';
|
|
col1 col2 col3
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#21755994 ALTER INPLACE CRASHES ON A INNODB TABLE WITH PARTITION ON SEPARATE TABLESPACE
|
|
#
|
|
# Note that we do not support partitions in shared tablespaces
|
|
# (at least not until WL12034).
|
|
CREATE TABLE t1 ( a INT NOT NULL, PRIMARY KEY (a))
|
|
ENGINE=InnoDB
|
|
PARTITION BY RANGE (a) PARTITIONS 3
|
|
( PARTITION P1 VALUES LESS THAN (2),
|
|
PARTITION P2 VALUES LESS THAN (4) TABLESPACE `innodb_system`,
|
|
PARTITION P3 VALUES LESS THAN (6));
|
|
ERROR HY000: InnoDB : A partitioned table is not allowed in a shared tablespace.
|
|
CREATE TABLE t1 ( a INT NOT NULL, PRIMARY KEY (a))
|
|
ENGINE=InnoDB
|
|
PARTITION BY RANGE (a) PARTITIONS 3
|
|
( PARTITION P1 VALUES LESS THAN (2),
|
|
PARTITION P2 VALUES LESS THAN (4) TABLESPACE `innodb_file_per_table`,
|
|
PARTITION P3 VALUES LESS THAN (6));
|
|
ALTER TABLE t1 ADD COLUMN f int;
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#21957001 INNODB: FAILING ASSERTION: 0 IN FILE HA_INNOPART.CC LINE 3526
|
|
#
|
|
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Trying to access missing tablespace .*");
|
|
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Missing .ibd file for table `test`\.`t1` .* ");
|
|
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Cannot calculate statistics for table .*");
|
|
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* Operating system error number 2 in a file operation.");
|
|
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* The error means the system cannot find the path specified.");
|
|
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* Cannot open datafile for read-only:");
|
|
CREATE TABLE t1(c1 INT,c2 CHAR(1)) PARTITION BY KEY(c1) PARTITIONS 4;
|
|
ALTER TABLE t1 DISCARD PARTITION p3 TABLESPACE;
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze status Operation failed
|
|
SELECT TABLE_ROWS FROM information_schema.tables where table_name = 't1';
|
|
TABLE_ROWS
|
|
0
|
|
ALTER TABLE t1 DISCARD PARTITION p1 TABLESPACE;
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p1` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p1` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze status Operation failed
|
|
SELECT TABLE_ROWS FROM information_schema.tables where table_name = 't1';
|
|
TABLE_ROWS
|
|
0
|
|
ALTER TABLE t1 DISCARD PARTITION p2 TABLESPACE;
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p1` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p2` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p1` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p2` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze status Operation failed
|
|
SELECT TABLE_ROWS FROM information_schema.tables where table_name = 't1';
|
|
TABLE_ROWS
|
|
0
|
|
ALTER TABLE t1 DISCARD PARTITION p0 TABLESPACE;
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p0` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p1` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p2` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p0` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p1` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p2` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze status Operation failed
|
|
SELECT TABLE_ROWS FROM information_schema.tables where table_name = 't1';
|
|
TABLE_ROWS
|
|
0
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1(c1 INT,c2 CHAR(1)) PARTITION BY KEY(c1) PARTITIONS 4;
|
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
|
ANALYZE TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p0` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p1` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p2` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p0` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p1` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p2` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze Warning InnoDB: Trying to get the free space for partition `test`.`t1` /* Partition `p3` */ but its tablespace has been discarded or the .ibd file is missing. Setting the free space of the partition to zero.
|
|
test.t1 analyze status Operation failed
|
|
SELECT TABLE_ROWS FROM information_schema.tables where table_name = 't1';
|
|
TABLE_ROWS
|
|
0
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#21864838: SIG11 IN FIELD_BLOB::CMP| AT SQL/FIELD.CC
|
|
#
|
|
CREATE TABLE t1 (col1 INT PRIMARY KEY, col2 VARCHAR(1), col3 BLOB AS (REPEAT(col2, 500)) VIRTUAL, KEY(col3(100)))
|
|
ENGINE=INNODB
|
|
PARTITION BY HASH(col1) PARTITIONS 2;
|
|
CREATE TABLE t2 (col1 INT PRIMARY KEY, col2 VARCHAR(1), col3 BLOB AS (REPEAT(col2, 500)) VIRTUAL, KEY(col3(100)))
|
|
ENGINE=INNODB
|
|
PARTITION BY HASH(col1) PARTITIONS 2;
|
|
INSERT INTO t1 (col1, col2) VALUES(1, 'd'), (2, 'c'), (3, 'b'), (4, 'a');
|
|
INSERT INTO t2 (col1, col2) VALUES(1, 'd'), (2, 'c'), (3, 'b'), (4, 'a');
|
|
SELECT t1.col1 FROM t1, t2 where t1.col1 = 3 AND t1.col3 = t2.col3 ORDER BY t2.col1 DESC;
|
|
col1
|
|
3
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
#
|
|
# Bug #21881155: UNINTIALIZED READ IN KEY_REC_CMP CAUSE CRASH LATER
|
|
#
|
|
CREATE TABLE t1 (col1 int, col2 BLOB AS ('a') VIRTUAL, col3 INT,
|
|
PRIMARY KEY(col1), KEY (col3, col2(1), col1))
|
|
ENGINE=INNODB
|
|
PARTITION BY KEY (col1) PARTITIONS 2;
|
|
INSERT INTO t1(col1) values (1),(2);
|
|
SELECT 1 FROM t1 WHERE col2 > 'a' GROUP BY col3;
|
|
1
|
|
DROP TABLE t1;
|
|
# Bug#22444530 - GCOLS + PARTITIONED TABLE, CRASH IN
|
|
#
|
|
set sql_mode='';
|
|
create table t (
|
|
a int not null,
|
|
b int generated always as (1) virtual not null,
|
|
c int generated always as (1) virtual not null,
|
|
key (c)
|
|
) engine=innodb partition by key (a) partitions 2;
|
|
insert into t(a) values(1);
|
|
select b from t group by c;
|
|
b
|
|
1
|
|
drop table t;
|
|
create table t (
|
|
a int not null,
|
|
b blob generated always as ("a") virtual not null,
|
|
c int generated always as (1) virtual not null,
|
|
key (c)
|
|
) engine=innodb partition by key (a) partitions 2;
|
|
insert into t(a) values(1);
|
|
select b from t group by c;
|
|
b
|
|
a
|
|
drop table t;
|
|
#
|
|
# Bug#23037025 COL+PARTITION SIG11 IN ROW_SEL_STORE_MYSQL_REC
|
|
#
|
|
set sql_mode='';
|
|
CREATE TABLE t1 (
|
|
col1 INT,
|
|
col2 INT AS (col1) VIRTUAL NOT NULL,
|
|
col3 INT AS (1) VIRTUAL,
|
|
KEY (col3)
|
|
) ENGINE=INNODB PARTITION BY KEY (col1) PARTITIONS 2;
|
|
CREATE TABLE t2 (col1 INTEGER);
|
|
CREATE TABLE t3 (col1 INTEGER);
|
|
CREATE TRIGGER t2_trig1 BEFORE INSERT ON t2 FOR EACH ROW
|
|
INSERT INTO t3 SELECT col2 FROM t1 GROUP BY col3;
|
|
INSERT IGNORE INTO t1(col1) values(NULL);
|
|
INSERT INTO t2 VALUES(1);
|
|
ERROR 23000: Column 'col2' cannot be null
|
|
DROP TRIGGER t2_trig1;
|
|
DROP TABLE t3;
|
|
DROP TABLE t2;
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#23194259 ASSERTION FAILURE:TRX0TRX.H:1416:SRV_READ_ONLY_MODE
|
|
#
|
|
CREATE TABLE t1(col1 INT AS(1), KEY(col1))
|
|
ENGINE=INNODB
|
|
PARTITION BY KEY(col1) PARTITIONS 2;
|
|
SELECT * FROM t1 WHERE sha(uuid_short());
|
|
col1
|
|
DROP TABLE t1;
|