aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-01-01 19:31:41 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2020-01-01 19:31:41 -0500
commit823e739d4a7257cf0ca58fc6eff3c4cec308fccf (patch)
tree6cdf250633c6af2ec1904862aa3fed07ffadc328 /src
parentc5f3b53b0ef2e8ae78e7488148c12bfe5939ca17 (diff)
downloadpostgresql-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.out26
-rw-r--r--src/test/regress/sql/aggregates.sql15
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
--