diff options
Diffstat (limited to 'src/test/regress/sql/join.sql')
| -rw-r--r-- | src/test/regress/sql/join.sql | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/regress/sql/join.sql b/src/test/regress/sql/join.sql index c47118e9291..7ec84f3b143 100644 --- a/src/test/regress/sql/join.sql +++ b/src/test/regress/sql/join.sql @@ -2232,6 +2232,24 @@ explain (costs off) select d.* from d left join (select * from b group by b.id, b.c_id) s on d.a = s.id and d.b = s.c_id; +-- check that join removal works for a left join when joining a subquery +-- that is guaranteed to be unique by GROUPING SETS +explain (costs off) +select d.* from d left join (select 1 as x from b group by ()) s + on d.a = s.x; + +explain (costs off) +select d.* from d left join (select 1 as x from b group by grouping sets(())) s + on d.a = s.x; + +explain (costs off) +select d.* from d left join (select 1 as x from b group by grouping sets(()), grouping sets(())) s + on d.a = s.x; + +explain (costs off) +select d.* from d left join (select 1 as x from b group by distinct grouping sets((), ())) s + on d.a = s.x; + -- similarly, but keying off a DISTINCT clause explain (costs off) select d.* from d left join (select distinct * from b) s @@ -2245,6 +2263,20 @@ explain (costs off) select d.* from d left join (select * from b group by b.id, b.c_id) s on d.a = s.id; +-- join removal is not possible when the GROUP BY contains non-empty grouping +-- sets or multiple empty grouping sets +explain (costs off) +select d.* from d left join (select 1 as x from b group by rollup(x)) s + on d.a = s.x; + +explain (costs off) +select d.* from d left join (select 1 as x from b group by grouping sets((), ())) s + on d.a = s.x; + +explain (costs off) +select d.* from d left join (select 1 as x from b group by grouping sets((), grouping sets(()))) s + on d.a = s.x; + -- similarly, but keying off a DISTINCT clause explain (costs off) select d.* from d left join (select distinct * from b) s |
