diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2020-01-01 19:31:41 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2020-01-01 19:31:41 -0500 |
commit | 823e739d4a7257cf0ca58fc6eff3c4cec308fccf (patch) | |
tree | 6cdf250633c6af2ec1904862aa3fed07ffadc328 /src | |
parent | c5f3b53b0ef2e8ae78e7488148c12bfe5939ca17 (diff) | |
download | postgresql-823e739d4a7257cf0ca58fc6eff3c4cec308fccf.tar.gz postgresql-823e739d4a7257cf0ca58fc6eff3c4cec308fccf.zip |
Test GROUP BY matching of join columns that are type-coerced by USING.
If we have, say, an int column that is left-joined to a bigint column
with USING, the merged column is the int column promoted to bigint.
GROUP BY's tests for whether grouping on the merged column allows a
reference to the underlying column, or vice versa, should know about
that relationship --- and they do. But I nearly broke this case with
an ill-advised optimization, so the lack of any test coverage for it
seems like a bad idea.
Diffstat (limited to 'src')
-rw-r--r-- | src/test/regress/expected/aggregates.out | 26 | ||||
-rw-r--r-- | src/test/regress/sql/aggregates.sql | 15 |
2 files changed, 41 insertions, 0 deletions
diff --git a/src/test/regress/expected/aggregates.out b/src/test/regress/expected/aggregates.out index d091ae4c6e4..f457b5b150f 100644 --- a/src/test/regress/expected/aggregates.out +++ b/src/test/regress/expected/aggregates.out @@ -1194,6 +1194,32 @@ drop table t2; drop table t3; drop table p_t1; -- +-- Test GROUP BY matching of join columns that are type-coerced due to USING +-- +create temp table t1(f1 int, f2 bigint); +create temp table t2(f1 bigint, f22 bigint); +select f1 from t1 left join t2 using (f1) group by f1; + f1 +---- +(0 rows) + +select f1 from t1 left join t2 using (f1) group by t1.f1; + f1 +---- +(0 rows) + +select t1.f1 from t1 left join t2 using (f1) group by t1.f1; + f1 +---- +(0 rows) + +-- only this one should fail: +select t1.f1 from t1 left join t2 using (f1) group by f1; +ERROR: column "t1.f1" must appear in the GROUP BY clause or be used in an aggregate function +LINE 1: select t1.f1 from t1 left join t2 using (f1) group by f1; + ^ +drop table t1, t2; +-- -- Test combinations of DISTINCT and/or ORDER BY -- select array_agg(a order by b) diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql index 17fb256aec5..3e593f2d615 100644 --- a/src/test/regress/sql/aggregates.sql +++ b/src/test/regress/sql/aggregates.sql @@ -433,6 +433,21 @@ drop table t3; drop table p_t1; -- +-- Test GROUP BY matching of join columns that are type-coerced due to USING +-- + +create temp table t1(f1 int, f2 bigint); +create temp table t2(f1 bigint, f22 bigint); + +select f1 from t1 left join t2 using (f1) group by f1; +select f1 from t1 left join t2 using (f1) group by t1.f1; +select t1.f1 from t1 left join t2 using (f1) group by t1.f1; +-- only this one should fail: +select t1.f1 from t1 left join t2 using (f1) group by f1; + +drop table t1, t2; + +-- -- Test combinations of DISTINCT and/or ORDER BY -- |