diff options
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r-- | src/backend/optimizer/plan/setrefs.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 69396694aaa..9e347ce7360 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -22,6 +22,7 @@ #include "optimizer/pathnode.h" #include "optimizer/planmain.h" #include "optimizer/tlist.h" +#include "tcop/utility.h" #include "utils/lsyscache.h" #include "utils/syscache.h" @@ -1887,16 +1888,14 @@ extract_query_dependencies_walker(Node *node, PlannerInfo *context) Query *query = (Query *) node; ListCell *lc; - if (query->commandType == CMD_UTILITY) + while (query->commandType == CMD_UTILITY) { - /* Ignore utility statements, except EXPLAIN */ - if (IsA(query->utilityStmt, ExplainStmt)) - { - query = (Query *) ((ExplainStmt *) query->utilityStmt)->query; - Assert(IsA(query, Query)); - Assert(query->commandType != CMD_UTILITY); - } - else + /* + * Ignore utility statements, except those (such as EXPLAIN) that + * contain a parsed-but-not-planned query. + */ + query = UtilityContainsQuery(query->utilityStmt); + if (query == NULL) return false; } |