mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#31797: error while parsing subqueries -- WHERE is parsed as HAVING
The name resolution for correlated subqueries and HAVING clauses failed to distinguish which of two was being performed when there was a reference to an outer aliased field. Fixed by adding the condition that HAVING clause name resulotion is being performed. mysql-test/r/group_by.result: Bug#31797: Test result mysql-test/t/group_by.test: Bug#31797: Test case sql/item.cc: Bug#31797: Corrected function comment. The fix, raising the error is restricted to HAVING name resolution.
This commit is contained in:
@ -1113,3 +1113,39 @@ c b
|
||||
3 1
|
||||
3 2
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 ( a INT, b INT );
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1;
|
||||
c (SELECT a FROM t1 WHERE b = c)
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1
|
||||
HAVING b = 10;
|
||||
c (SELECT a FROM t1 WHERE b = c)
|
||||
SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1
|
||||
HAVING b = 10;
|
||||
ERROR 42S22: Reference 'c' not supported (reference to group function)
|
||||
SET @old_sql_mode = @@sql_mode;
|
||||
SET @@sql_mode='ONLY_FULL_GROUP_BY';
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1;
|
||||
c (SELECT a FROM t1 WHERE b = c)
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1
|
||||
HAVING b = 10;
|
||||
ERROR 42000: non-grouping field 'b' is used in HAVING clause
|
||||
SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1
|
||||
HAVING b = 10;
|
||||
ERROR 42S22: Reference 'c' not supported (reference to group function)
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1;
|
||||
c (SELECT a FROM t1 WHERE b = c)
|
||||
1 1
|
||||
INSERT INTO t1 VALUES (2, 1);
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1;
|
||||
ERROR 21000: Subquery returns more than 1 row
|
||||
DROP TABLE t1;
|
||||
SET @@sql_mode = @old_sql_mode;
|
||||
|
@ -815,3 +815,51 @@ EXPLAIN SELECT c,b FROM t1 GROUP BY c,b;
|
||||
SELECT c,b FROM t1 GROUP BY c,b;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #31797: error while parsing subqueries -- WHERE is parsed as HAVING
|
||||
#
|
||||
CREATE TABLE t1 ( a INT, b INT );
|
||||
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1;
|
||||
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1
|
||||
HAVING b = 10;
|
||||
|
||||
--error ER_ILLEGAL_REFERENCE
|
||||
SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1
|
||||
HAVING b = 10;
|
||||
|
||||
SET @old_sql_mode = @@sql_mode;
|
||||
SET @@sql_mode='ONLY_FULL_GROUP_BY';
|
||||
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1;
|
||||
|
||||
--error ER_NON_GROUPING_FIELD_USED
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1
|
||||
HAVING b = 10;
|
||||
|
||||
--error ER_ILLEGAL_REFERENCE
|
||||
SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1
|
||||
HAVING b = 10;
|
||||
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1;
|
||||
|
||||
INSERT INTO t1 VALUES (2, 1);
|
||||
--error ER_SUBQUERY_NO_1_ROW
|
||||
SELECT b c, (SELECT a FROM t1 WHERE b = c)
|
||||
FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
SET @@sql_mode = @old_sql_mode;
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user