diff options
Diffstat (limited to 'src/backend/utils/adt/ruleutils.c')
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 2194ab3dfa5..be1f1f50b78 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -3773,9 +3773,8 @@ deparse_context_for_plan_tree(PlannedStmt *pstmt, List *rtable_names) dpns->appendrels = NULL; /* don't need it */ /* - * Set up column name aliases. We will get rather bogus results for join - * RTEs, but that doesn't matter because plan trees don't contain any join - * alias Vars. + * Set up column name aliases, ignoring any join RTEs; they don't matter + * because plan trees don't contain any join alias Vars. */ set_simple_column_names(dpns); @@ -4067,8 +4066,10 @@ set_deparse_for_query(deparse_namespace *dpns, Query *query, * * This handles EXPLAIN and cases where we only have relation RTEs. Without * a join tree, we can't do anything smart about join RTEs, but we don't - * need to (note that EXPLAIN should never see join alias Vars anyway). - * If we do hit a join RTE we'll just process it like a non-table base RTE. + * need to, because EXPLAIN should never see join alias Vars anyway. + * If we find a join RTE we'll just skip it, leaving its deparse_columns + * struct all-zero. If somehow we try to deparse a join alias Var, we'll + * error out cleanly because the struct's num_cols will be zero. */ static void set_simple_column_names(deparse_namespace *dpns) @@ -4082,13 +4083,14 @@ set_simple_column_names(deparse_namespace *dpns) dpns->rtable_columns = lappend(dpns->rtable_columns, palloc0(sizeof(deparse_columns))); - /* Assign unique column aliases within each RTE */ + /* Assign unique column aliases within each non-join RTE */ forboth(lc, dpns->rtable, lc2, dpns->rtable_columns) { RangeTblEntry *rte = (RangeTblEntry *) lfirst(lc); deparse_columns *colinfo = (deparse_columns *) lfirst(lc2); - set_relation_column_names(dpns, rte, colinfo); + if (rte->rtekind != RTE_JOIN) + set_relation_column_names(dpns, rte, colinfo); } } |