Merge polly.(none):/home/kaa/src/opt/bug32202/my50-bug26215
into polly.(none):/home/kaa/src/opt/mysql-5.0-opt sql/sql_select.cc: Auto merged
This commit is contained in:
commit
04468cba0a
@ -1113,3 +1113,68 @@ c b
|
|||||||
3 1
|
3 1
|
||||||
3 2
|
3 2
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(
|
||||||
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
c1 INT NOT NULL,
|
||||||
|
c2 INT NOT NULL,
|
||||||
|
UNIQUE KEY (c2,c1));
|
||||||
|
INSERT INTO t1(c1,c2) VALUES (5,1), (4,1), (3,5), (2,3), (1,3);
|
||||||
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
|
id c1 c2
|
||||||
|
5 1 3
|
||||||
|
4 2 3
|
||||||
|
3 3 5
|
||||||
|
2 4 1
|
||||||
|
1 5 1
|
||||||
|
SELECT * FROM t1 GROUP BY id ORDER BY c1;
|
||||||
|
id c1 c2
|
||||||
|
5 1 3
|
||||||
|
4 2 3
|
||||||
|
3 3 5
|
||||||
|
2 4 1
|
||||||
|
1 5 1
|
||||||
|
SELECT * FROM t1 GROUP BY id ORDER BY id DESC;
|
||||||
|
id c1 c2
|
||||||
|
5 1 3
|
||||||
|
4 2 3
|
||||||
|
3 3 5
|
||||||
|
2 4 1
|
||||||
|
1 5 1
|
||||||
|
SELECT * FROM t1 GROUP BY c2 ,c1, id ORDER BY c2, c1;
|
||||||
|
id c1 c2
|
||||||
|
2 4 1
|
||||||
|
1 5 1
|
||||||
|
5 1 3
|
||||||
|
4 2 3
|
||||||
|
3 3 5
|
||||||
|
SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1;
|
||||||
|
id c1 c2
|
||||||
|
3 3 5
|
||||||
|
5 1 3
|
||||||
|
4 2 3
|
||||||
|
2 4 1
|
||||||
|
1 5 1
|
||||||
|
SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1 DESC;
|
||||||
|
id c1 c2
|
||||||
|
3 3 5
|
||||||
|
4 2 3
|
||||||
|
5 1 3
|
||||||
|
1 5 1
|
||||||
|
2 4 1
|
||||||
|
SELECT * FROM t1 GROUP BY c2 ORDER BY c2, c1;
|
||||||
|
id c1 c2
|
||||||
|
1 5 1
|
||||||
|
4 2 3
|
||||||
|
3 3 5
|
||||||
|
SELECT * FROM t1 GROUP BY c2 ORDER BY c2 DESC, c1;
|
||||||
|
id c1 c2
|
||||||
|
3 3 5
|
||||||
|
4 2 3
|
||||||
|
1 5 1
|
||||||
|
SELECT * FROM t1 GROUP BY c2 ORDER BY c2 DESC, c1 DESC;
|
||||||
|
id c1 c2
|
||||||
|
3 3 5
|
||||||
|
4 2 3
|
||||||
|
1 5 1
|
||||||
|
DROP TABLE t1;
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -815,3 +815,38 @@ EXPLAIN SELECT c,b FROM t1 GROUP BY c,b;
|
|||||||
SELECT c,b FROM t1 GROUP BY c,b;
|
SELECT c,b FROM t1 GROUP BY c,b;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #32202: ORDER BY not working with GROUP BY
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1(
|
||||||
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
c1 INT NOT NULL,
|
||||||
|
c2 INT NOT NULL,
|
||||||
|
UNIQUE KEY (c2,c1));
|
||||||
|
|
||||||
|
INSERT INTO t1(c1,c2) VALUES (5,1), (4,1), (3,5), (2,3), (1,3);
|
||||||
|
|
||||||
|
# Show that the test cases from the bug report pass
|
||||||
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
|
SELECT * FROM t1 GROUP BY id ORDER BY c1;
|
||||||
|
|
||||||
|
# Show that DESC is handled correctly
|
||||||
|
SELECT * FROM t1 GROUP BY id ORDER BY id DESC;
|
||||||
|
|
||||||
|
# Show that results are correctly ordered when ORDER BY fields
|
||||||
|
# are a subset of GROUP BY ones
|
||||||
|
SELECT * FROM t1 GROUP BY c2 ,c1, id ORDER BY c2, c1;
|
||||||
|
SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1;
|
||||||
|
SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1 DESC;
|
||||||
|
|
||||||
|
# Show that results are correctly ordered when GROUP BY fields
|
||||||
|
# are a subset of ORDER BY ones
|
||||||
|
SELECT * FROM t1 GROUP BY c2 ORDER BY c2, c1;
|
||||||
|
SELECT * FROM t1 GROUP BY c2 ORDER BY c2 DESC, c1;
|
||||||
|
SELECT * FROM t1 GROUP BY c2 ORDER BY c2 DESC, c1 DESC;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
|
@ -1065,10 +1065,19 @@ JOIN::optimize()
|
|||||||
We have found that grouping can be removed since groups correspond to
|
We have found that grouping can be removed since groups correspond to
|
||||||
only one row anyway, but we still have to guarantee correct result
|
only one row anyway, but we still have to guarantee correct result
|
||||||
order. The line below effectively rewrites the query from GROUP BY
|
order. The line below effectively rewrites the query from GROUP BY
|
||||||
<fields> to ORDER BY <fields>. One exception is if skip_sort_order is
|
<fields> to ORDER BY <fields>. There are two exceptions:
|
||||||
set (see above), then we can simply skip GROUP BY.
|
- if skip_sort_order is set (see above), then we can simply skip
|
||||||
|
GROUP BY;
|
||||||
|
- we can only rewrite ORDER BY if the ORDER BY fields are 'compatible'
|
||||||
|
with the GROUP BY ones, i.e. either one is a prefix of another.
|
||||||
|
We only check if the ORDER BY is a prefix of GROUP BY. In this case
|
||||||
|
test_if_subpart() copies the ASC/DESC attributes from the original
|
||||||
|
ORDER BY fields.
|
||||||
|
If GROUP BY is a prefix of ORDER BY, then it is safe to leave
|
||||||
|
'order' as is.
|
||||||
*/
|
*/
|
||||||
order= skip_sort_order ? 0 : group_list;
|
if (!order || test_if_subpart(group_list, order))
|
||||||
|
order= skip_sort_order ? 0 : group_list;
|
||||||
group_list= 0;
|
group_list= 0;
|
||||||
group= 0;
|
group= 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user