mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Tweak GROUP BY so that it will still accept result-column names, but only
after trying to resolve the item as an input-column name. This allows us to be compliant with the SQL92 spec for queries that fall within the spec, while still accepting the same out-of-spec queries as 6.5 did. You'll only lose if there is an output column name that is the same as an input column name, but doesn't refer to the same value. 7.0 will interpret such a GROUP BY spec differently than 6.5 did. No way around that, because 6.5 was clearly not spec compliant.
This commit is contained in:
@ -96,14 +96,18 @@ SELECT f1 AS two, max(f3) AS max_float, min(f3) as min_float
|
||||
2 | 0 | -1.2345678901234e+200
|
||||
(2 rows)
|
||||
|
||||
-- Postgres used to accept this, but it is clearly against SQL92 to
|
||||
-- interpret GROUP BY arguments as result column names; they should
|
||||
-- be source column names *only*. An error is expected.
|
||||
-- GROUP BY a result column name is not legal per SQL92, but we accept it
|
||||
-- anyway (if the name is not the name of any column exposed by FROM).
|
||||
SELECT f1 AS two, max(f3) AS max_float, min(f3) AS min_float
|
||||
FROM TEMP_GROUP
|
||||
GROUP BY two
|
||||
ORDER BY two, max_float, min_float;
|
||||
ERROR: Attribute 'two' not found
|
||||
two | max_float | min_float
|
||||
-----+----------------------+-----------------------
|
||||
1 | 1.2345678901234e+200 | 0
|
||||
2 | 0 | -1.2345678901234e+200
|
||||
(2 rows)
|
||||
|
||||
SELECT f1 AS two, (max(f3) + 1) AS max_plus_1, (min(f3) - 1) AS min_minus_1
|
||||
FROM TEMP_GROUP
|
||||
GROUP BY f1
|
||||
|
@ -70,9 +70,8 @@ SELECT f1 AS two, max(f3) AS max_float, min(f3) as min_float
|
||||
GROUP BY f1
|
||||
ORDER BY two, max_float, min_float;
|
||||
|
||||
-- Postgres used to accept this, but it is clearly against SQL92 to
|
||||
-- interpret GROUP BY arguments as result column names; they should
|
||||
-- be source column names *only*. An error is expected.
|
||||
-- GROUP BY a result column name is not legal per SQL92, but we accept it
|
||||
-- anyway (if the name is not the name of any column exposed by FROM).
|
||||
SELECT f1 AS two, max(f3) AS max_float, min(f3) AS min_float
|
||||
FROM TEMP_GROUP
|
||||
GROUP BY two
|
||||
|
Reference in New Issue
Block a user