Commit eae53468 authored by unknown's avatar unknown

Merge polly.(none):/home/kaa/src/opt/bug30666/my51-bug29131

into  polly.(none):/home/kaa/src/opt/mysql-5.1-opt


sql/sql_select.cc:
  Auto merged
mysql-test/r/select.result:
  Manual merge.
mysql-test/t/select.test:
  Manual merge.
parents 04a5618d 84fbbf4d
......@@ -4233,6 +4233,45 @@ 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
create table t1(a INT, KEY (a));
INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
......
......@@ -3567,6 +3567,42 @@ 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
#
......
......@@ -6299,10 +6299,9 @@ make_join_readinfo(JOIN *join, ulonglong options)
ordered. If there is a temp table the ordering is done as a last
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)) ||
(join->sort_by_table == (TABLE *) 1 && i != join->const_tables)))
if (!ordered_set && !join->need_tmp &&
(table == join->sort_by_table ||
(join->sort_by_table == (TABLE *) 1 && i != join->const_tables)))
ordered_set= 1;
tab->sorted= sorted;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment