Skip to content

Commit 787102b

Browse files
tglsfdcpetere
authored andcommitted
Enable WRITE_READ_PARSE_PLAN_TREES of rewritten utility statements
This was previously disabled because we lacked outfuncs/readfuncs support for most utility statement types. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/4159834.1657405226@sss.pgh.pa.us
1 parent 40ad8f9 commit 787102b

File tree

1 file changed

+11
-21
lines changed

1 file changed

+11
-21
lines changed

src/backend/tcop/postgres.c

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ pg_rewrite_query(Query *query)
801801
new_list = copyObject(querytree_list);
802802
/* This checks both copyObject() and the equal() routines... */
803803
if (!equal(new_list, querytree_list))
804-
elog(WARNING, "copyObject() failed to produce equal parse tree");
804+
elog(WARNING, "copyObject() failed to produce an equal rewritten parse tree");
805805
else
806806
querytree_list = new_list;
807807
}
@@ -813,35 +813,25 @@ pg_rewrite_query(Query *query)
813813
List *new_list = NIL;
814814
ListCell *lc;
815815

816-
/*
817-
* We currently lack outfuncs/readfuncs support for most utility
818-
* statement types, so only attempt to write/read non-utility queries.
819-
*/
820816
foreach(lc, querytree_list)
821817
{
822818
Query *query = lfirst_node(Query, lc);
819+
char *str = nodeToString(query);
820+
Query *new_query = stringToNodeWithLocations(str);
823821

824-
if (query->commandType != CMD_UTILITY)
825-
{
826-
char *str = nodeToString(query);
827-
Query *new_query = stringToNodeWithLocations(str);
828-
829-
/*
830-
* queryId is not saved in stored rules, but we must preserve
831-
* it here to avoid breaking pg_stat_statements.
832-
*/
833-
new_query->queryId = query->queryId;
822+
/*
823+
* queryId is not saved in stored rules, but we must preserve it
824+
* here to avoid breaking pg_stat_statements.
825+
*/
826+
new_query->queryId = query->queryId;
834827

835-
new_list = lappend(new_list, new_query);
836-
pfree(str);
837-
}
838-
else
839-
new_list = lappend(new_list, query);
828+
new_list = lappend(new_list, new_query);
829+
pfree(str);
840830
}
841831

842832
/* This checks both outfuncs/readfuncs and the equal() routines... */
843833
if (!equal(new_list, querytree_list))
844-
elog(WARNING, "outfuncs/readfuncs failed to produce equal parse tree");
834+
elog(WARNING, "outfuncs/readfuncs failed to produce an equal rewritten parse tree");
845835
else
846836
querytree_list = new_list;
847837
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy