diff options
author | Kevin Grittner <kgrittn@postgresql.org> | 2013-11-02 18:31:41 -0500 |
---|---|---|
committer | Kevin Grittner <kgrittn@postgresql.org> | 2013-11-02 18:31:41 -0500 |
commit | b2cd72cbbdd2a1b657d7dc874fcc9f1c1d83d8e3 (patch) | |
tree | d789ecce6c9d2b3d4a2a8af4b7c6f1e4614179bf | |
parent | 86dab9c8addd2898abc0feddc4e7f1ef0cd786f4 (diff) | |
download | postgresql-b2cd72cbbdd2a1b657d7dc874fcc9f1c1d83d8e3.tar.gz postgresql-b2cd72cbbdd2a1b657d7dc874fcc9f1c1d83d8e3.zip |
Fix subquery reference to non-populated MV in CMV.
A subquery reference to a matview should be allowed by CREATE
MATERIALIZED VIEW WITH NO DATA, just like a direct reference is.
Per bug report from Laurent Sartran.
Backpatch to 9.3.
-rw-r--r-- | src/backend/executor/execMain.c | 3 | ||||
-rw-r--r-- | src/test/regress/expected/matview.out | 6 | ||||
-rw-r--r-- | src/test/regress/sql/matview.sql | 6 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index ee228b6dee8..fe0321ea06a 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -864,7 +864,8 @@ InitPlan(QueryDesc *queryDesc, int eflags) * it is a parameterless subplan (not initplan), we suggest that it be * prepared to handle REWIND efficiently; otherwise there is no need. */ - sp_eflags = eflags & EXEC_FLAG_EXPLAIN_ONLY; + sp_eflags = eflags + & (EXEC_FLAG_EXPLAIN_ONLY | EXEC_FLAG_WITH_NO_DATA); if (bms_is_member(i, plannedstmt->rewindPlanIDs)) sp_eflags |= EXEC_FLAG_REWIND; diff --git a/src/test/regress/expected/matview.out b/src/test/regress/expected/matview.out index a98de4f58d3..b0a1b48a3ca 100644 --- a/src/test/regress/expected/matview.out +++ b/src/test/regress/expected/matview.out @@ -385,3 +385,9 @@ SELECT * FROM hogeview WHERE i < 10; DROP TABLE hoge CASCADE; NOTICE: drop cascades to materialized view hogeview +-- allow subquery to reference unpopulated matview if WITH NO DATA is specified +CREATE MATERIALIZED VIEW mv1 AS SELECT 1 AS col1 WITH NO DATA; +CREATE MATERIALIZED VIEW mv2 AS SELECT * FROM mv1 + WHERE col1 = (SELECT LEAST(col1) FROM mv1) WITH NO DATA; +DROP MATERIALIZED VIEW mv1 CASCADE; +NOTICE: drop cascades to materialized view mv2 diff --git a/src/test/regress/sql/matview.sql b/src/test/regress/sql/matview.sql index 975f8dd5750..501cd7d6a73 100644 --- a/src/test/regress/sql/matview.sql +++ b/src/test/regress/sql/matview.sql @@ -124,3 +124,9 @@ SELECT * FROM hogeview WHERE i < 10; VACUUM ANALYZE; SELECT * FROM hogeview WHERE i < 10; DROP TABLE hoge CASCADE; + +-- allow subquery to reference unpopulated matview if WITH NO DATA is specified +CREATE MATERIALIZED VIEW mv1 AS SELECT 1 AS col1 WITH NO DATA; +CREATE MATERIALIZED VIEW mv2 AS SELECT * FROM mv1 + WHERE col1 = (SELECT LEAST(col1) FROM mv1) WITH NO DATA; +DROP MATERIALIZED VIEW mv1 CASCADE; |