From 8b55847b9ef4114045acd4d782adaa170179aafc Mon Sep 17 00:00:00 2001 From: Sami Imseih Date: Mon, 16 Dec 2024 09:45:19 -0600 Subject: [PATCH 1/1] experiment-no-unique-column-deparse --- src/backend/utils/adt/ruleutils.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 2194ab3dfa..8b44d21daf 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -182,6 +182,8 @@ typedef struct char *funcname; int numargs; char **argnames; + /* Sets if we should try to make columns unique */ + bool make_columns_unique; } deparse_namespace; /* @@ -3719,6 +3721,7 @@ deparse_context_for(const char *aliasname, Oid relid) dpns->subplans = NIL; dpns->ctes = NIL; dpns->appendrels = NULL; + dpns->make_columns_unique = true; set_rtable_names(dpns, NIL, NULL); set_simple_column_names(dpns); @@ -3751,6 +3754,7 @@ deparse_context_for_plan_tree(PlannedStmt *pstmt, List *rtable_names) dpns->rtable_names = rtable_names; dpns->subplans = pstmt->subplans; dpns->ctes = NIL; + dpns->make_columns_unique = false; if (pstmt->appendRelations) { /* Set up the array, indexed by child relid */ @@ -4018,6 +4022,7 @@ set_deparse_for_query(deparse_namespace *dpns, Query *query, dpns->subplans = NIL; dpns->ctes = query->cteList; dpns->appendrels = NULL; + dpns->make_columns_unique = true; /* Assign a unique relation alias to each RTE */ set_rtable_names(dpns, parent_namespaces, NULL); @@ -4456,7 +4461,8 @@ set_relation_column_names(deparse_namespace *dpns, RangeTblEntry *rte, colinfo->is_new_col = (bool *) palloc(ncolumns * sizeof(bool)); /* If the RTE is wide enough, use a hash table to avoid O(N^2) costs */ - build_colinfo_names_hash(colinfo); + if (dpns->make_columns_unique) + build_colinfo_names_hash(colinfo); /* * Scan the columns, select a unique alias for each one, and store it in @@ -4490,7 +4496,8 @@ set_relation_column_names(deparse_namespace *dpns, RangeTblEntry *rte, colname = real_colname; /* Unique-ify and insert into colinfo */ - colname = make_colname_unique(colname, dpns, colinfo); + if (dpns->make_columns_unique) + colname = make_colname_unique(colname, dpns, colinfo); colinfo->colnames[i] = colname; add_to_names_hash(colinfo, colname); @@ -4508,7 +4515,8 @@ set_relation_column_names(deparse_namespace *dpns, RangeTblEntry *rte, } /* We're now done needing the colinfo's names_hash */ - destroy_colinfo_names_hash(colinfo); + if (dpns->make_columns_unique) + destroy_colinfo_names_hash(colinfo); /* * Set correct length for new_colnames[] array. (Note: if columns have -- 2.39.5 (Apple Git-154)