Loading mysql-test/r/select.result +39 −0 Original line number Diff line number Diff line Loading @@ -4248,4 +4248,43 @@ str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00' select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL; str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL 0 CREATE TABLE t1 (c11 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE t2 (c21 INT UNSIGNED NOT NULL, c22 INT DEFAULT NULL, KEY(c21, c22)); CREATE TABLE t3 (c31 INT UNSIGNED NOT NULL DEFAULT 0, c32 INT DEFAULT NULL, c33 INT NOT NULL, c34 INT UNSIGNED DEFAULT 0, KEY (c33, c34, c32)); INSERT INTO t1 values (),(),(),(),(); INSERT INTO t2 SELECT a.c11, b.c11 FROM t1 a, t1 b; INSERT INTO t3 VALUES (1, 1, 1, 0), (2, 2, 0, 0), (3, 3, 1, 0), (4, 4, 0, 0), (5, 5, 1, 0); SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND t3.c33 = 1 AND t2.c22 in (1, 3) ORDER BY c32; c32 1 1 3 3 5 5 SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND t3.c33 = 1 AND t2.c22 in (1, 3) ORDER BY c32 DESC; c32 5 5 3 3 1 1 DROP TABLE t1, t2, t3; End of 5.0 tests mysql-test/t/select.test +36 −0 Original line number Diff line number Diff line Loading @@ -3578,4 +3578,40 @@ select str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL; select str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00'; select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL; # # Bug #30666: Incorrect order when using range conditions on 2 tables or more # CREATE TABLE t1 (c11 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE t2 (c21 INT UNSIGNED NOT NULL, c22 INT DEFAULT NULL, KEY(c21, c22)); CREATE TABLE t3 (c31 INT UNSIGNED NOT NULL DEFAULT 0, c32 INT DEFAULT NULL, c33 INT NOT NULL, c34 INT UNSIGNED DEFAULT 0, KEY (c33, c34, c32)); INSERT INTO t1 values (),(),(),(),(); INSERT INTO t2 SELECT a.c11, b.c11 FROM t1 a, t1 b; INSERT INTO t3 VALUES (1, 1, 1, 0), (2, 2, 0, 0), (3, 3, 1, 0), (4, 4, 0, 0), (5, 5, 1, 0); # Show that ORDER BY produces the correct results order SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND t3.c33 = 1 AND t2.c22 in (1, 3) ORDER BY c32; # Show that ORDER BY DESC produces the correct results order SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND t3.c33 = 1 AND t2.c22 in (1, 3) ORDER BY c32 DESC; DROP TABLE t1, t2, t3; --echo End of 5.0 tests sql/sql_select.cc +3 −4 Original line number Diff line number Diff line Loading @@ -6089,8 +6089,7 @@ make_join_readinfo(JOIN *join, ulonglong options) operation and doesn't prevent join cache usage. */ if (!ordered_set && !join->need_tmp && ((table == join->sort_by_table && (!join->order || join->skip_sort_order)) || (table == join->sort_by_table || (join->sort_by_table == (TABLE *) 1 && i != join->const_tables))) ordered_set= 1; Loading Loading
mysql-test/r/select.result +39 −0 Original line number Diff line number Diff line Loading @@ -4248,4 +4248,43 @@ str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00' select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL; str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL 0 CREATE TABLE t1 (c11 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE t2 (c21 INT UNSIGNED NOT NULL, c22 INT DEFAULT NULL, KEY(c21, c22)); CREATE TABLE t3 (c31 INT UNSIGNED NOT NULL DEFAULT 0, c32 INT DEFAULT NULL, c33 INT NOT NULL, c34 INT UNSIGNED DEFAULT 0, KEY (c33, c34, c32)); INSERT INTO t1 values (),(),(),(),(); INSERT INTO t2 SELECT a.c11, b.c11 FROM t1 a, t1 b; INSERT INTO t3 VALUES (1, 1, 1, 0), (2, 2, 0, 0), (3, 3, 1, 0), (4, 4, 0, 0), (5, 5, 1, 0); SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND t3.c33 = 1 AND t2.c22 in (1, 3) ORDER BY c32; c32 1 1 3 3 5 5 SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND t3.c33 = 1 AND t2.c22 in (1, 3) ORDER BY c32 DESC; c32 5 5 3 3 1 1 DROP TABLE t1, t2, t3; End of 5.0 tests
mysql-test/t/select.test +36 −0 Original line number Diff line number Diff line Loading @@ -3578,4 +3578,40 @@ select str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL; select str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00'; select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL; # # Bug #30666: Incorrect order when using range conditions on 2 tables or more # CREATE TABLE t1 (c11 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE t2 (c21 INT UNSIGNED NOT NULL, c22 INT DEFAULT NULL, KEY(c21, c22)); CREATE TABLE t3 (c31 INT UNSIGNED NOT NULL DEFAULT 0, c32 INT DEFAULT NULL, c33 INT NOT NULL, c34 INT UNSIGNED DEFAULT 0, KEY (c33, c34, c32)); INSERT INTO t1 values (),(),(),(),(); INSERT INTO t2 SELECT a.c11, b.c11 FROM t1 a, t1 b; INSERT INTO t3 VALUES (1, 1, 1, 0), (2, 2, 0, 0), (3, 3, 1, 0), (4, 4, 0, 0), (5, 5, 1, 0); # Show that ORDER BY produces the correct results order SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND t3.c33 = 1 AND t2.c22 in (1, 3) ORDER BY c32; # Show that ORDER BY DESC produces the correct results order SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND t3.c33 = 1 AND t2.c22 in (1, 3) ORDER BY c32 DESC; DROP TABLE t1, t2, t3; --echo End of 5.0 tests
sql/sql_select.cc +3 −4 Original line number Diff line number Diff line Loading @@ -6089,8 +6089,7 @@ make_join_readinfo(JOIN *join, ulonglong options) operation and doesn't prevent join cache usage. */ if (!ordered_set && !join->need_tmp && ((table == join->sort_by_table && (!join->order || join->skip_sort_order)) || (table == join->sort_by_table || (join->sort_by_table == (TABLE *) 1 && i != join->const_tables))) ordered_set= 1; Loading