Loading mysql-test/include/mix1.inc +41 −14 Original line number Diff line number Diff line Loading @@ -723,20 +723,6 @@ set @@sort_buffer_size=default; DROP TABLE t1,t2; # # Bug #32815: query with ORDER BY and a possible ref_or_null access # CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB; INSERT INTO t1 VALUES (191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2); EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; DROP TABLE t1; # Test of behaviour with CREATE ... SELECT # Loading Loading @@ -1091,6 +1077,19 @@ desc t1; show create table t1; drop table t1; # # Bug #32815: query with ORDER BY and a possible ref_or_null access # CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB; INSERT INTO t1 VALUES (191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2); EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; DROP TABLE t1; --echo End of 5.0 tests # Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY Loading Loading @@ -1383,4 +1382,32 @@ create table t1 (a int auto_increment primary key) engine=innodb; alter table t1 order by a; drop table t1; # # Bug #33697: ORDER BY primary key DESC vs. ref access + filesort # (reproduced only with InnoDB tables) # CREATE TABLE t1 (vid integer NOT NULL, tid integer NOT NULL, idx integer NOT NULL, name varchar(128) NOT NULL, type varchar(128) NULL, PRIMARY KEY(idx, vid, tid), UNIQUE(vid, tid, name) ) ENGINE=InnoDB; INSERT INTO t1 VALUES (1,1,1,'pk',NULL),(2,1,1,'pk',NULL),(3,1,1,'pk',NULL),(4,1,1,'c1',NULL), (5,1,1,'pk',NULL),(1,1,2,'c1',NULL),(2,1,2,'c1',NULL),(3,1,2,'c1',NULL), (4,1,2,'c2',NULL),(5,1,2,'c1',NULL),(2,1,3,'c2',NULL),(3,1,3,'c2',NULL), (4,1,3,'pk',NULL),(5,1,3,'c2',NULL), (2,1,4,'c_extra',NULL),(3,1,4,'c_extra',NULL); EXPLAIN SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; DROP TABLE t1; --echo End of 5.1 tests mysql-test/r/innodb_mysql.result +26 −1 Original line number Diff line number Diff line Loading @@ -1349,7 +1349,7 @@ INSERT INTO t1 VALUES (191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2); EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL idx NULL NULL NULL 3 Using where; Using filesort 1 SIMPLE t1 ALL idx NULL NULL NULL 4 Using where; Using filesort SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; id type d 191 member 1 Loading Loading @@ -1609,4 +1609,29 @@ alter table t1 order by a; Warnings: Warning 1105 ORDER BY ignored as there is a user-defined clustered index in the table 't1' drop table t1; CREATE TABLE t1 (vid integer NOT NULL, tid integer NOT NULL, idx integer NOT NULL, name varchar(128) NOT NULL, type varchar(128) NULL, PRIMARY KEY(idx, vid, tid), UNIQUE(vid, tid, name) ) ENGINE=InnoDB; INSERT INTO t1 VALUES (1,1,1,'pk',NULL),(2,1,1,'pk',NULL),(3,1,1,'pk',NULL),(4,1,1,'c1',NULL), (5,1,1,'pk',NULL),(1,1,2,'c1',NULL),(2,1,2,'c1',NULL),(3,1,2,'c1',NULL), (4,1,2,'c2',NULL),(5,1,2,'c1',NULL),(2,1,3,'c2',NULL),(3,1,3,'c2',NULL), (4,1,3,'pk',NULL),(5,1,3,'c2',NULL), (2,1,4,'c_extra',NULL),(3,1,4,'c_extra',NULL); EXPLAIN SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index vid PRIMARY 12 NULL 16 Using where SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; vid tid idx name type 3 1 4 c_extra NULL 3 1 3 c2 NULL 3 1 2 c1 NULL 3 1 1 pk NULL DROP TABLE t1; End of 5.1 tests mysql-test/t/disabled.def +0 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ federated_transactions : Bug#29523 Transactions do not work events : Bug#32664 events.test fails randomly lowercase_table3 : Bug#32667 lowercase_table3.test reports to error log kill : Bug#29149: Test "kill" fails on Windows innodb_mysql : Bug#32724: innodb_mysql.test fails randomly wait_timeout : Bug#32801 wait_timeout.test fails randomly ctype_create : Bug#32965 main.ctype_create fails status : Bug#32966 main.status fails Loading sql/sql_select.cc +2 −1 Original line number Diff line number Diff line Loading @@ -13122,7 +13122,8 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, select->quick=tmp; } } else if (tab->ref.key >= 0 && tab->ref.key_parts <= used_key_parts) else if (tab->type != JT_NEXT && tab->ref.key >= 0 && tab->ref.key_parts <= used_key_parts) { /* SELECT * FROM t1 WHERE a=1 ORDER BY a DESC,b DESC Loading Loading
mysql-test/include/mix1.inc +41 −14 Original line number Diff line number Diff line Loading @@ -723,20 +723,6 @@ set @@sort_buffer_size=default; DROP TABLE t1,t2; # # Bug #32815: query with ORDER BY and a possible ref_or_null access # CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB; INSERT INTO t1 VALUES (191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2); EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; DROP TABLE t1; # Test of behaviour with CREATE ... SELECT # Loading Loading @@ -1091,6 +1077,19 @@ desc t1; show create table t1; drop table t1; # # Bug #32815: query with ORDER BY and a possible ref_or_null access # CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB; INSERT INTO t1 VALUES (191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2); EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; DROP TABLE t1; --echo End of 5.0 tests # Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY Loading Loading @@ -1383,4 +1382,32 @@ create table t1 (a int auto_increment primary key) engine=innodb; alter table t1 order by a; drop table t1; # # Bug #33697: ORDER BY primary key DESC vs. ref access + filesort # (reproduced only with InnoDB tables) # CREATE TABLE t1 (vid integer NOT NULL, tid integer NOT NULL, idx integer NOT NULL, name varchar(128) NOT NULL, type varchar(128) NULL, PRIMARY KEY(idx, vid, tid), UNIQUE(vid, tid, name) ) ENGINE=InnoDB; INSERT INTO t1 VALUES (1,1,1,'pk',NULL),(2,1,1,'pk',NULL),(3,1,1,'pk',NULL),(4,1,1,'c1',NULL), (5,1,1,'pk',NULL),(1,1,2,'c1',NULL),(2,1,2,'c1',NULL),(3,1,2,'c1',NULL), (4,1,2,'c2',NULL),(5,1,2,'c1',NULL),(2,1,3,'c2',NULL),(3,1,3,'c2',NULL), (4,1,3,'pk',NULL),(5,1,3,'c2',NULL), (2,1,4,'c_extra',NULL),(3,1,4,'c_extra',NULL); EXPLAIN SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; DROP TABLE t1; --echo End of 5.1 tests
mysql-test/r/innodb_mysql.result +26 −1 Original line number Diff line number Diff line Loading @@ -1349,7 +1349,7 @@ INSERT INTO t1 VALUES (191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2); EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL idx NULL NULL NULL 3 Using where; Using filesort 1 SIMPLE t1 ALL idx NULL NULL NULL 4 Using where; Using filesort SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d; id type d 191 member 1 Loading Loading @@ -1609,4 +1609,29 @@ alter table t1 order by a; Warnings: Warning 1105 ORDER BY ignored as there is a user-defined clustered index in the table 't1' drop table t1; CREATE TABLE t1 (vid integer NOT NULL, tid integer NOT NULL, idx integer NOT NULL, name varchar(128) NOT NULL, type varchar(128) NULL, PRIMARY KEY(idx, vid, tid), UNIQUE(vid, tid, name) ) ENGINE=InnoDB; INSERT INTO t1 VALUES (1,1,1,'pk',NULL),(2,1,1,'pk',NULL),(3,1,1,'pk',NULL),(4,1,1,'c1',NULL), (5,1,1,'pk',NULL),(1,1,2,'c1',NULL),(2,1,2,'c1',NULL),(3,1,2,'c1',NULL), (4,1,2,'c2',NULL),(5,1,2,'c1',NULL),(2,1,3,'c2',NULL),(3,1,3,'c2',NULL), (4,1,3,'pk',NULL),(5,1,3,'c2',NULL), (2,1,4,'c_extra',NULL),(3,1,4,'c_extra',NULL); EXPLAIN SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index vid PRIMARY 12 NULL 16 Using where SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC; vid tid idx name type 3 1 4 c_extra NULL 3 1 3 c2 NULL 3 1 2 c1 NULL 3 1 1 pk NULL DROP TABLE t1; End of 5.1 tests
mysql-test/t/disabled.def +0 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ federated_transactions : Bug#29523 Transactions do not work events : Bug#32664 events.test fails randomly lowercase_table3 : Bug#32667 lowercase_table3.test reports to error log kill : Bug#29149: Test "kill" fails on Windows innodb_mysql : Bug#32724: innodb_mysql.test fails randomly wait_timeout : Bug#32801 wait_timeout.test fails randomly ctype_create : Bug#32965 main.ctype_create fails status : Bug#32966 main.status fails Loading
sql/sql_select.cc +2 −1 Original line number Diff line number Diff line Loading @@ -13122,7 +13122,8 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, select->quick=tmp; } } else if (tab->ref.key >= 0 && tab->ref.key_parts <= used_key_parts) else if (tab->type != JT_NEXT && tab->ref.key >= 0 && tab->ref.key_parts <= used_key_parts) { /* SELECT * FROM t1 WHERE a=1 ORDER BY a DESC,b DESC Loading