Skip to content

Commit ad4a343

Browse files
author
Tor Didriksen
committed
Bug#25525774 MISC EXPLAIN TESTS FAIL WHEN CHANGING DEFAULT CHARACTER SET
To repeat: ./mtr --mem --charset-for-testdb=utf8mb4 explain_for_connection_small_json explain_for_connection_small_trad explain myisam_explain_json_non_select_all myisam_explain_json_non_select_none myisam_explain_non_select_all myisam_explain_non_select_none innodb_explain_json_non_select_all innodb_explain_json_non_select_none innodb_explain_non_select_all innodb_explain_non_select_none Fix: re-record with explicit charset for queries/tables with mismatch in explain output.
1 parent 1f5dbc9 commit ad4a343

13 files changed

+371
-353
lines changed

mysql-test/include/explain_for_connection_small.inc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@
9999
INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9) ;
100100
CREATE TABLE t1 ( pk INTEGER NOT NULL, i1 INTEGER NOT NULL, c1 VARCHAR(10) NOT NULL, PRIMARY KEY (pk) ) ;
101101
INSERT INTO t1 SELECT a, 1, 'MySQL' FROM ten ;
102-
CREATE TABLE t2 ( pk INTEGER NOT NULL, c1 VARCHAR(10) NOT NULL, c2 varchar(10) NOT NULL, PRIMARY KEY (pk) ) ;
102+
CREATE TABLE t2 ( pk INTEGER NOT NULL, c1 VARCHAR(10) NOT NULL, c2 varchar(10) NOT NULL, PRIMARY KEY (pk) ) charset latin1;
103103
INSERT INTO t2 SELECT a, 'MySQL', 'MySQL' FROM ten ;
104-
CREATE TABLE t3 ( pk INTEGER NOT NULL, c1 VARCHAR(10) NOT NULL, PRIMARY KEY (pk) ) ;
104+
CREATE TABLE t3 ( pk INTEGER NOT NULL, c1 VARCHAR(10) NOT NULL, PRIMARY KEY (pk) ) charset latin1;
105105
INSERT INTO t3 SELECT a, 'MySQL' FROM ten ;
106-
CREATE TABLE t4 ( pk int(11) NOT NULL, c1_key varchar(10) CHARACTER SET utf8 NOT NULL, c2 varchar(10) NOT NULL, c3 varchar(10) NOT NULL, PRIMARY KEY (pk), KEY k1 (c1_key) ) ;
107-
CREATE TABLE t5 ( pk INTEGER NOT NULL, c1 VARCHAR(10) NOT NULL, PRIMARY KEY (pk) ) ;
106+
CREATE TABLE t4 ( pk int(11) NOT NULL, c1_key varchar(10) CHARACTER SET utf8 NOT NULL, c2 varchar(10) NOT NULL, c3 varchar(10) NOT NULL, PRIMARY KEY (pk), KEY k1 (c1_key) ) charset latin1;
107+
CREATE TABLE t5 ( pk INTEGER NOT NULL, c1 VARCHAR(10) NOT NULL, PRIMARY KEY (pk) ) charset latin1;
108108
INSERT INTO t5 SELECT a, 'MySQL' FROM ten ;
109109
let $point= after_join_optimize;let $query= SELECT STRAIGHT_JOIN * FROM (t1 LEFT JOIN (t2 LEFT JOIN (t3 LEFT OUTER JOIN t4 ON t3.c1 <= t4.c1_key) ON t2.c1 = t4.c3) ON t1.c1 = t4.c2) RIGHT OUTER JOIN t5 ON t2.c2 <= t5.c1 WHERE t1.i1 = 1 ;
110110
--source include/explain_for_connection.inc
@@ -299,7 +299,7 @@ SET sql_mode = default;
299299

300300

301301

302-
CREATE TABLE t1 ( a varchar(255) default NULL, b timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, INDEX idx(a,b) ) ;
302+
CREATE TABLE t1 ( a varchar(240) default NULL, b timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, INDEX idx(a,b) ) ;
303303
CREATE TABLE t2 ( a varchar(255) default NULL ) ;
304304
INSERT INTO t1 VALUES ('abcdefghijk','2007-05-07 06:00:24') ;
305305
INSERT INTO t1 SELECT * FROM t1 ;

mysql-test/include/explain_non_select.inc

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ DROP TABLE t1, t2;
212212
--echo #21
213213
CREATE TABLE t1 (a1 INT);
214214
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
215-
CREATE TABLE t2 (a2 VARCHAR(10));
215+
CREATE TABLE t2 (a2 VARCHAR(10)) charset utf8mb4;
216216
INSERT INTO t2 VALUES (1), (2), (3), (4), (5);
217217
SET @save_optimizer_switch= @@optimizer_switch;
218218
--disable_query_log
@@ -316,7 +316,7 @@ INSERT INTO t1 (i) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
316316
DROP TABLE t1;
317317

318318
--echo #30
319-
CREATE TABLE t1(a INT, i CHAR(2), INDEX(i(1)));
319+
CREATE TABLE t1(a INT, i CHAR(2), INDEX(i(1))) charset utf8mb4;
320320
INSERT INTO t1 (i) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
321321
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
322322
(30),(31),(32),(33),(34),(35);
@@ -356,7 +356,8 @@ CREATE TABLE t1 (i INT);
356356
INSERT INTO t1 (i) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
357357
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
358358
(30),(31),(32),(33),(34),(35);
359-
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), d CHAR(2), INDEX (a,b(1),c));
359+
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), d CHAR(2), INDEX (a,b(1),c))
360+
charset utf8mb4;
360361
INSERT INTO t2 SELECT i, i, i, i FROM t1;
361362
--let $query = DELETE FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5
362363
--let $select = SELECT * FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5
@@ -369,7 +370,7 @@ INSERT INTO t1 (i) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
369370
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
370371
(30),(31),(32),(33),(34),(35);
371372
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), d CHAR(2), INDEX (a,b,c))
372-
ENGINE=HEAP;
373+
charset utf8mb4 ENGINE=HEAP;
373374
INSERT INTO t2 SELECT i, i, i, i FROM t1;
374375
--let $query = DELETE FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5
375376
--let $select = SELECT * FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5
@@ -410,7 +411,7 @@ CREATE TABLE t1 (i INT);
410411
INSERT INTO t1 (i) VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
411412
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
412413
(30),(31),(32),(33),(34),(35);
413-
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), INDEX (a, b));
414+
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), INDEX (a, b)) charset utf8mb4;
414415
INSERT INTO t2 SELECT i, i, i FROM t1;
415416
--let $query = DELETE FROM t2 ORDER BY a, b DESC LIMIT 5
416417
--let $select = SELECT * FROM t2 ORDER BY a, b DESC LIMIT 5
@@ -422,7 +423,7 @@ CREATE TABLE t1 (i INT);
422423
INSERT INTO t1 VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
423424
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
424425
(30),(31),(32),(33),(34),(35);
425-
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c INT, INDEX (a, b));
426+
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c INT, INDEX (a, b)) charset utf8mb4;
426427
INSERT INTO t2 (a, b) SELECT i, i FROM t1;
427428
INSERT INTO t2 (a, b) SELECT t1.i, t1.i FROM t1, t1 x1, t1 x2;
428429
--let $query = DELETE FROM t2 ORDER BY a DESC, b DESC LIMIT 5
@@ -449,7 +450,7 @@ CREATE TABLE t1 (i INT);
449450
INSERT INTO t1 VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
450451
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
451452
(30),(31),(32),(33),(34),(35);
452-
CREATE TABLE t2(a INT, i CHAR(2), INDEX(i(1)));
453+
CREATE TABLE t2(a INT, i CHAR(2), INDEX(i(1))) charset utf8mb4;
453454
INSERT INTO t2 (i) SELECT i FROM t1;
454455
--let $query = UPDATE t2 SET a = 10 WHERE i > 10 AND i <= 18 ORDER BY i LIMIT 5
455456
--let $select = SELECT * FROM t2 WHERE i > 10 AND i <= 18 ORDER BY i LIMIT 5
@@ -487,7 +488,8 @@ CREATE TABLE t1 (i INT);
487488
INSERT INTO t1 VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
488489
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
489490
(30),(31),(32),(33),(34),(35);
490-
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), d CHAR(2), INDEX (a,b(1),c));
491+
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), d CHAR(2), INDEX (a,b(1),c))
492+
charset utf8mb4;
491493
INSERT INTO t2 SELECT i, i, i, i FROM t1;
492494
--let $query = UPDATE t2 SET d = 10 WHERE b = 10 ORDER BY a, c LIMIT 5
493495
--let $select = SELECT * FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5
@@ -500,7 +502,7 @@ INSERT INTO t1 VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
500502
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
501503
(30),(31),(32),(33),(34),(35);
502504
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), d CHAR(2), INDEX (a,b,c))
503-
ENGINE=HEAP;
505+
charset utf8mb4 ENGINE=HEAP;
504506
INSERT INTO t2 SELECT i, i, i, i FROM t1;
505507
--let $query = UPDATE t2 SET d = 10 WHERE b = 10 ORDER BY a, c LIMIT 5
506508
--let $select = SELECT * FROM t2 WHERE b = 10 ORDER BY a, c LIMIT 5
@@ -541,7 +543,7 @@ CREATE TABLE t1 (i INT);
541543
INSERT INTO t1 VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
542544
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
543545
(30),(31),(32),(33),(34),(35);
544-
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), INDEX (a, b));
546+
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c CHAR(2), INDEX (a, b)) charset utf8mb4;
545547
INSERT INTO t2 SELECT i, i, i FROM t1;
546548
--let $query = UPDATE t2 SET c = 10 ORDER BY a, b DESC LIMIT 5
547549
--let $select = SELECT * FROM t2 ORDER BY a, b DESC LIMIT 5
@@ -553,7 +555,7 @@ CREATE TABLE t1 (i INT);
553555
INSERT INTO t1 VALUES (10),(11),(12),(13),(14),(15),(16),(17),(18),(19),
554556
(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),
555557
(30),(31),(32),(33),(34),(35);
556-
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c INT, INDEX (a, b));
558+
CREATE TABLE t2 (a CHAR(2), b CHAR(2), c INT, INDEX (a, b)) charset utf8mb4;
557559
INSERT INTO t2 (a, b) SELECT i, i FROM t1;
558560
INSERT INTO t2 (a, b) SELECT t1.i, t1.i FROM t1, t1 x1, t1 x2;
559561
--let $query = UPDATE t2 SET c = 10 ORDER BY a DESC, b DESC LIMIT 5
@@ -569,7 +571,7 @@ CREATE TABLE t1 (
569571
c2 INT,
570572
PRIMARY KEY (pk),
571573
INDEX c1_idx (c1_idx)
572-
);
574+
) charset utf8mb4;
573575
INSERT INTO t1 VALUES (1,'y',1), (2,'n',2), (3,'y',3), (4,'n',4);
574576
--let $query = UPDATE t1 SET c2 = 0 WHERE c1_idx = 'y' ORDER BY pk DESC LIMIT 2
575577
--let $select = SELECT * FROM t1 WHERE c1_idx = 'y' ORDER BY pk DESC LIMIT 2

mysql-test/r/explain.result

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
drop table if exists t1;
2-
create table t1 (id int not null, str char(10), unique(str));
2+
create table t1 (id int not null, str char(10), unique(str)) charset utf8mb4;
33
explain select * from t1;
44
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
55
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table
@@ -15,7 +15,7 @@ id str
1515
3 foo
1616
explain select * from t1 where str is null;
1717
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
18-
1 SIMPLE t1 NULL ref str str 11 const 1 100.00 Using index condition
18+
1 SIMPLE t1 NULL ref str str 41 const 1 100.00 Using index condition
1919
Warnings:
2020
Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id`,`test`.`t1`.`str` AS `str` from `test`.`t1` where isnull(`test`.`t1`.`str`)
2121
explain format=json select * from t1 where str is null;
@@ -36,7 +36,7 @@ EXPLAIN
3636
"used_key_parts": [
3737
"str"
3838
],
39-
"key_length": "11",
39+
"key_length": "41",
4040
"ref": [
4141
"const"
4242
],
@@ -48,7 +48,7 @@ EXPLAIN
4848
"read_cost": "0.25",
4949
"eval_cost": "0.10",
5050
"prefix_cost": "0.35",
51-
"data_read_per_join": "16"
51+
"data_read_per_join": "48"
5252
},
5353
"used_columns": [
5454
"id",
@@ -61,19 +61,19 @@ Warnings:
6161
Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id`,`test`.`t1`.`str` AS `str` from `test`.`t1` where isnull(`test`.`t1`.`str`)
6262
explain select * from t1 where str="foo";
6363
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
64-
1 SIMPLE t1 NULL const str str 11 const 1 100.00 NULL
64+
1 SIMPLE t1 NULL const str str 41 const 1 100.00 NULL
6565
Warnings:
66-
Note 1003 /* select#1 */ select '3' AS `id`,'foo' AS `str` from `test`.`t1` where 1
66+
Note 1003 /* select#1 */ select '3' AS `id`,'foo' AS `str` from `test`.`t1` where ('foo' = 'foo')
6767
explain select * from t1 ignore key (str) where str="foo";
6868
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
6969
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 25.00 Using where
7070
Warnings:
7171
Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id`,`test`.`t1`.`str` AS `str` from `test`.`t1` IGNORE INDEX (`str`) where (`test`.`t1`.`str` = 'foo')
7272
explain select * from t1 use key (str,str) where str="foo";
7373
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
74-
1 SIMPLE t1 NULL const str str 11 const 1 100.00 NULL
74+
1 SIMPLE t1 NULL const str str 41 const 1 100.00 NULL
7575
Warnings:
76-
Note 1003 /* select#1 */ select '3' AS `id`,'foo' AS `str` from `test`.`t1` USE INDEX (`str`) USE INDEX (`str`) where 1
76+
Note 1003 /* select#1 */ select '3' AS `id`,'foo' AS `str` from `test`.`t1` USE INDEX (`str`) USE INDEX (`str`) where ('foo' = 'foo')
7777
explain select * from t1 use key (str,str,foo) where str="foo";
7878
ERROR 42000: Key 'foo' doesn't exist in table 't1'
7979
explain select * from t1 ignore key (str,str,foo) where str="foo";
@@ -613,7 +613,7 @@ Note 1003 /* select#1 */ select 1 AS `1` union all /* select#2 */ select 1 AS `1
613613
# BUG#53562: EXPLAIN statement should hint when
614614
# index is not used due to type conversion
615615
#
616-
CREATE TABLE t1 (url char(1) PRIMARY KEY);
616+
CREATE TABLE t1 (url char(1) PRIMARY KEY) charset latin1;
617617
INSERT INTO t1 VALUES ('1'),('2'),('3'),('4'),('5');
618618

619619
# Normally, lookup access on primary key is done

mysql-test/r/explain_for_connection_small_json.result

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,7 @@ Diff: EXPLAIN NORMAL vs OTHER
616616
@@ -61,4 +62,3 @@
617617
"b"
618618
- ],
619-
- "attached_condition": "((`test`.`t1`.`a` = `test`.`t2`.`a`))"
619+
- "attached_condition": "((`test`.`t1`.`a` = `test`.`t2`.`a`) and (`test`.`t1`.`a` = `test`.`t2`.`a`))"
620620
+ ]
621621
}
622622
QUERY: SELECT t1.pk FROM t1 WHERE t1.col_varchar_key < ALL ( SELECT * FROM v1 )

0 commit comments

Comments
 (0)