From 40ad8f9deed21f02b23eb034bfca87f7acc7562b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 26 Sep 2022 16:32:16 +0200 Subject: [PATCH] Implement WRITE_READ_PARSE_PLAN_TREES for raw parse trees Reviewed-by: Tom Lane Discussion: https://www.postgresql.org/message-id/flat/4159834.1657405226@sss.pgh.pa.us --- src/backend/tcop/postgres.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 35eff28bd3..4952d01183 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -603,10 +603,22 @@ pg_parse_query(const char *query_string) #endif /* - * Currently, outfuncs/readfuncs support is missing for many raw parse - * tree nodes, so we don't try to implement WRITE_READ_PARSE_PLAN_TREES - * here. + * Optional debugging check: pass raw parsetrees through + * outfuncs/readfuncs */ +#ifdef WRITE_READ_PARSE_PLAN_TREES + { + char *str = nodeToString(raw_parsetree_list); + List *new_list = stringToNodeWithLocations(str); + + pfree(str); + /* This checks both outfuncs/readfuncs and the equal() routines... */ + if (!equal(new_list, raw_parsetree_list)) + elog(WARNING, "outfuncs/readfuncs failed to produce an equal raw parse tree"); + else + raw_parsetree_list = new_list; + } +#endif TRACE_POSTGRESQL_QUERY_PARSE_DONE(query_string);