mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
Fix for bug #32202: ORDER BY not working with GROUP BY
The bug is a regression introduced by the fix for bug30596. The problem was that in cases when groups in GROUP BY correspond to only one row, and there is ORDER BY, the GROUP BY was removed and the ORDER BY rewritten to ORDER BY <group_by_columns> without checking if the columns in GROUP BY and ORDER BY are compatible. This led to incorrect ordering of the result set as it was sorted using the GROUP BY columns. Additionaly, the code discarded ASC/DESC modifiers from ORDER BY even if its columns were compatible with the GROUP BY ones. This patch fixes the regression by checking if ORDER BY columns form a prefix of the GROUP BY ones, and rewriting ORDER BY only in that case, preserving the ASC/DESC modifiers. That check is sufficient, since the GROUP BY columns contain a unique index. mysql-test/r/group_by.result: Added a test case for bug #32202. mysql-test/t/group_by.test: Added a test case for bug #32202. sql/sql_select.cc: In cases when groups in GROUP BY correspond to only one row and there is ORDER BY, rewrite the query to ORDER BY <group_by_columns> only if the columns in ORDER BY and GROUP BY are compatible, i.e. either one forms a prefix for another.
This commit is contained in:
parent
4713575c77
commit
55499d2bf4
3 changed files with 112 additions and 3 deletions
|
|
@ -1113,3 +1113,68 @@ c b
|
|||
3 1
|
||||
3 2
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue