From 8b55847b9ef4114045acd4d782adaa170179aafc Mon Sep 17 00:00:00 2001
From: Sami Imseih <simseih@amazon.com>
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)

