summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/with.out64
-rw-r--r--src/test/regress/sql/with.sql31
2 files changed, 95 insertions, 0 deletions
diff --git a/src/test/regress/expected/with.out b/src/test/regress/expected/with.out
index d17da5c32ad..b7f02d6de1b 100644
--- a/src/test/regress/expected/with.out
+++ b/src/test/regress/expected/with.out
@@ -2504,6 +2504,70 @@ SELECT * FROM bug6051_3;
---
(0 rows)
+-- check case where CTE reference is removed due to optimization
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT q1 FROM
+(
+ WITH t_cte AS (SELECT * FROM int8_tbl t)
+ SELECT q1, (SELECT q2 FROM t_cte WHERE t_cte.q1 = i8.q1) AS t_sub
+ FROM int8_tbl i8
+) ss;
+ QUERY PLAN
+--------------------------------------
+ Subquery Scan on ss
+ Output: ss.q1
+ -> Seq Scan on public.int8_tbl i8
+ Output: i8.q1, NULL::bigint
+(4 rows)
+
+SELECT q1 FROM
+(
+ WITH t_cte AS (SELECT * FROM int8_tbl t)
+ SELECT q1, (SELECT q2 FROM t_cte WHERE t_cte.q1 = i8.q1) AS t_sub
+ FROM int8_tbl i8
+) ss;
+ q1
+------------------
+ 123
+ 123
+ 4567890123456789
+ 4567890123456789
+ 4567890123456789
+(5 rows)
+
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT q1 FROM
+(
+ WITH t_cte AS MATERIALIZED (SELECT * FROM int8_tbl t)
+ SELECT q1, (SELECT q2 FROM t_cte WHERE t_cte.q1 = i8.q1) AS t_sub
+ FROM int8_tbl i8
+) ss;
+ QUERY PLAN
+---------------------------------------------
+ Subquery Scan on ss
+ Output: ss.q1
+ -> Seq Scan on public.int8_tbl i8
+ Output: i8.q1, NULL::bigint
+ CTE t_cte
+ -> Seq Scan on public.int8_tbl t
+ Output: t.q1, t.q2
+(7 rows)
+
+SELECT q1 FROM
+(
+ WITH t_cte AS MATERIALIZED (SELECT * FROM int8_tbl t)
+ SELECT q1, (SELECT q2 FROM t_cte WHERE t_cte.q1 = i8.q1) AS t_sub
+ FROM int8_tbl i8
+) ss;
+ q1
+------------------
+ 123
+ 123
+ 4567890123456789
+ 4567890123456789
+ 4567890123456789
+(5 rows)
+
-- a truly recursive CTE in the same list
WITH RECURSIVE t(a) AS (
SELECT 0
diff --git a/src/test/regress/sql/with.sql b/src/test/regress/sql/with.sql
index 2b99e43a0b2..2be7e0866ac 100644
--- a/src/test/regress/sql/with.sql
+++ b/src/test/regress/sql/with.sql
@@ -1173,6 +1173,37 @@ COMMIT;
SELECT * FROM bug6051_3;
+-- check case where CTE reference is removed due to optimization
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT q1 FROM
+(
+ WITH t_cte AS (SELECT * FROM int8_tbl t)
+ SELECT q1, (SELECT q2 FROM t_cte WHERE t_cte.q1 = i8.q1) AS t_sub
+ FROM int8_tbl i8
+) ss;
+
+SELECT q1 FROM
+(
+ WITH t_cte AS (SELECT * FROM int8_tbl t)
+ SELECT q1, (SELECT q2 FROM t_cte WHERE t_cte.q1 = i8.q1) AS t_sub
+ FROM int8_tbl i8
+) ss;
+
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT q1 FROM
+(
+ WITH t_cte AS MATERIALIZED (SELECT * FROM int8_tbl t)
+ SELECT q1, (SELECT q2 FROM t_cte WHERE t_cte.q1 = i8.q1) AS t_sub
+ FROM int8_tbl i8
+) ss;
+
+SELECT q1 FROM
+(
+ WITH t_cte AS MATERIALIZED (SELECT * FROM int8_tbl t)
+ SELECT q1, (SELECT q2 FROM t_cte WHERE t_cte.q1 = i8.q1) AS t_sub
+ FROM int8_tbl i8
+) ss;
+
-- a truly recursive CTE in the same list
WITH RECURSIVE t(a) AS (
SELECT 0