Skip to content

Commit

Permalink
Adding various tests for combinations of
Browse files Browse the repository at this point in the history
UNION, ROLLUP, GROUP_CONCAT, for better coverage.
  • Loading branch information
Alexander Barkov committed May 25, 2016
1 parent 2fc6e79 commit 971538f
Show file tree
Hide file tree
Showing 2 changed files with 439 additions and 0 deletions.
257 changes: 257 additions & 0 deletions mysql-test/r/parser.result
Original file line number Diff line number Diff line change
Expand Up @@ -897,3 +897,260 @@ CREATE TABLE t1 AS SELECT 1 ORDER BY 1 UNION SELECT 2;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UNION SELECT 2' at line 1
CREATE TABLE t1 AS SELECT 1 LIMIT 1 UNION SELECT 2;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UNION SELECT 2' at line 1
#
# MDEV-8909 union parser cleanup
#
# UNION with a non-parenthesized term
# The following two queries return a wrong result
# This will change when MDEV-10120 is fixed
# For now, we're testing the parser.
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (10),(20),(30);
SELECT 1 AS a UNION SELECT a FROM t1 GROUP BY a ORDER BY GROUP_CONCAT(a);
a
1
SELECT 1 AS a UNION SELECT a FROM t1 GROUP BY a ORDER BY GROUP_CONCAT(a ORDER BY a);
a
1
DROP TABLE t1;
# UNION with a parenthesed term
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (10),(20),(30);
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a ORDER BY GROUP_CONCAT(a ORDER BY a) LIMIT 2);
a
1
10
20
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a ORDER BY GROUP_CONCAT(a));
ERROR HY000: Invalid use of group function
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a ORDER BY GROUP_CONCAT(a)) LIMIT 1;
ERROR HY000: Invalid use of group function
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a ORDER BY GROUP_CONCAT(a)) ORDER BY a;
ERROR HY000: Invalid use of group function
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a ORDER BY GROUP_CONCAT(a)) ORDER BY a LIMIT 1;
ERROR HY000: Invalid use of group function
DROP TABLE t1;
# UNION with a parethesized term with ROLLUP
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (10),(20),(30);
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a WITH ROLLUP);
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a WITH ROLLUP) LIMIT 1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a WITH ROLLUP) ORDER BY a LIMIT 1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a WITH ROLLUP LIMIT 2);
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a WITH ROLLUP ORDER BY a);
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a));
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT 1 AS a UNION (SELECT a FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a ORDER BY a));
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
DROP TABLE t1;
# UNION with a non-parethesized term with ROLLUP
# This will change after: MDEV-10120 Wrong result of UNION .. ORDER BY GROUP_CONCAT()
# Currently we're testing the parser only
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (10),(20),(30);
SELECT 1 AS a UNION SELECT a FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a);
a
1
SELECT 1 AS a UNION SELECT a FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a ORDER BY a);
a
1
SELECT 1 AS a UNION SELECT a FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a ORDER BY a) LIMIT 1;
a
1
DROP TABLE t1;
# Derived table with ROLLUP
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (10),(20),(30);
SELECT * FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1;
a
10
20
30
NULL
SELECT * FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 LIMIT 1;
a
10
SELECT * FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 ORDER BY a;
a
NULL
10
20
30
SELECT * FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 ORDER BY a LIMIT 1;
a
NULL
SELECT * FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 ORDER BY a DESC LIMIT 1;
a
30
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 ORDER BY GROUP_CONCAT(a);
a GROUP_CONCAT(a)
10 10,20,30
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 ORDER BY GROUP_CONCAT(a ORDER BY a);
a GROUP_CONCAT(a)
10 10,20,30
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 ORDER BY GROUP_CONCAT(a) LIMIT 1;
a GROUP_CONCAT(a)
10 10,20,30
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 ORDER BY GROUP_CONCAT(a ORDER BY a) LIMIT 1;
a GROUP_CONCAT(a)
10 10,20,30
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 GROUP BY a ORDER BY GROUP_CONCAT(a);
a GROUP_CONCAT(a)
NULL NULL
10 10
20 20
30 30
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 GROUP BY a ORDER BY GROUP_CONCAT(a ORDER BY a);
a GROUP_CONCAT(a)
NULL NULL
10 10
20 20
30 30
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 GROUP BY a ORDER BY GROUP_CONCAT(a) DESC;
a GROUP_CONCAT(a)
30 30
20 20
10 10
NULL NULL
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 GROUP BY a ORDER BY GROUP_CONCAT(a ORDER BY a) DESC;
a GROUP_CONCAT(a)
30 30
20 20
10 10
NULL NULL
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 GROUP BY a ORDER BY GROUP_CONCAT(a) LIMIT 1;
a GROUP_CONCAT(a)
NULL NULL
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 GROUP BY a ORDER BY GROUP_CONCAT(a ORDER BY a) LIMIT 1;
a GROUP_CONCAT(a)
NULL NULL
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 GROUP BY a ORDER BY GROUP_CONCAT(a) DESC LIMIT 1;
a GROUP_CONCAT(a)
30 30
SELECT a, GROUP_CONCAT(a) FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP) t1 GROUP BY a ORDER BY GROUP_CONCAT(a ORDER BY a) DESC LIMIT 1;
a GROUP_CONCAT(a)
30 30
SELECT * FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a) t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT * FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a LIMIT 1) t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT * FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a)) t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT * FROM (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a ORDER BY a)) t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
DROP TABLE t1;
# Subquery, one row, ROLLUP
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (10);
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP HAVING a IS NULL);
(SELECT * FROM t1 GROUP BY a WITH ROLLUP HAVING a IS NULL)
NULL
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP HAVING a IS NOT NULL);
(SELECT * FROM t1 GROUP BY a WITH ROLLUP HAVING a IS NOT NULL)
10
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP LIMIT 1);
(SELECT * FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
SELECT (SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1);
(SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
SELECT (SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1);
(SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP HAVING a IS NULL) FROM t1;
(SELECT * FROM t1 GROUP BY a WITH ROLLUP HAVING a IS NULL)
NULL
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP HAVING a IS NOT NULL) FROM t1;
(SELECT * FROM t1 GROUP BY a WITH ROLLUP HAVING a IS NOT NULL)
10
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP LIMIT 1) FROM t1;
(SELECT * FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
SELECT (SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1) FROM t1;
(SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
SELECT (SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1) FROM t1;
(SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP);
ERROR 21000: Subquery returns more than 1 row
SELECT (SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP);
ERROR 21000: Subquery returns more than 1 row
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP) FROM t1;
ERROR 21000: Subquery returns more than 1 row
SELECT (SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP) FROM t1;
ERROR 21000: Subquery returns more than 1 row
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a);
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a LIMIT 1);
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a));
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP ORDER BY a LIMIT 1) AS a;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a) FROM t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a LIMIT 1) FROM t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a)) FROM t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP ORDER BY a LIMIT 1) AS a FROM t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
DROP TABLE t1;
# Subquery, multiple rows, ROLLUP
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (10),(20),(30);
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP LIMIT 1);
(SELECT * FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
SELECT (SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1);
(SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
SELECT (SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1);
(SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP LIMIT 1) FROM t1;
(SELECT * FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
10
10
SELECT (SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1) FROM t1;
(SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
10
10
SELECT (SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1) FROM t1;
(SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1)
10
10
10
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP);
ERROR 21000: Subquery returns more than 1 row
SELECT (SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP);
ERROR 21000: Subquery returns more than 1 row
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP) FROM t1;
ERROR 21000: Subquery returns more than 1 row
SELECT (SELECT GROUP_CONCAT(a) FROM t1 GROUP BY a WITH ROLLUP) FROM t1;
ERROR 21000: Subquery returns more than 1 row
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a);
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a LIMIT 1);
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a));
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP ORDER BY a LIMIT 1) AS a;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a) FROM t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY a LIMIT 1) FROM t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT * FROM t1 GROUP BY a WITH ROLLUP ORDER BY GROUP_CONCAT(a)) FROM t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
SELECT (SELECT GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a WITH ROLLUP ORDER BY a LIMIT 1) AS a FROM t1;
ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
DROP TABLE t1;
Loading

0 comments on commit 971538f

Please sign in to comment.