diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2012-06-27 23:18:30 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2012-06-27 23:18:30 -0400 |
commit | bde689f809027422d4c0baaa3e63b69ce5762e2c (patch) | |
tree | 1e183710a3c5fb6f64b965b2cd010e01fc50ec68 /src/backend/optimizer/plan/setrefs.c | |
parent | f7867154129781ee1522344bef50890c01f2b47a (diff) | |
download | postgresql-bde689f809027422d4c0baaa3e63b69ce5762e2c.tar.gz postgresql-bde689f809027422d4c0baaa3e63b69ce5762e2c.zip |
Make UtilityContainsQuery recurse until it finds a non-utility Query.
The callers of UtilityContainsQuery want it to return a non-utility Query
if it returns anything at all. However, since we made CREATE TABLE
AS/SELECT INTO into a utility command instead of a variant of SELECT,
a command like "EXPLAIN SELECT INTO" results in two nested utility
statements. So what we need UtilityContainsQuery to do is drill down
to the bottom non-utility Query.
I had thought of this possibility in setrefs.c, and fixed it there by
looping around the UtilityContainsQuery call; but overlooked that the call
sites in plancache.c have a similar issue. In those cases it's
notationally inconvenient to provide an external loop, so let's redefine
UtilityContainsQuery as recursing down to a non-utility Query instead.
Noted by Rushabh Lathia. This is a somewhat cleaned-up version of his
proposed patch.
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r-- | src/backend/optimizer/plan/setrefs.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index f375b5f76d4..ccd69fc3660 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -1937,7 +1937,7 @@ extract_query_dependencies_walker(Node *node, PlannerInfo *context) Query *query = (Query *) node; ListCell *lc; - while (query->commandType == CMD_UTILITY) + if (query->commandType == CMD_UTILITY) { /* * Ignore utility statements, except those (such as EXPLAIN) that |