diff --git a/src/common/backend/utils/adt/ruleutils.cpp b/src/common/backend/utils/adt/ruleutils.cpp index 5b6a40326..31d63d52e 100644 --- a/src/common/backend/utils/adt/ruleutils.cpp +++ b/src/common/backend/utils/adt/ruleutils.cpp @@ -5789,6 +5789,11 @@ static void make_viewdef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc, i void deparse_query(Query* query, StringInfo buf, List* parentnamespace, bool finalise_aggs, bool sortgroup_colno, void* parserArg, bool qrw_phase, bool is_fqs) { + if (u_sess->hook_cxt.deparseQueryHook != NULL) { + ((deparse_query_func)(u_sess->hook_cxt.deparseQueryHook))(query, buf, parentnamespace, + finalise_aggs, sortgroup_colno, parserArg, qrw_phase, is_fqs); + return; + } OverrideSearchPath* tmp_search_path = NULL; List* schema_list = NIL; ListCell* schema = NULL; diff --git a/src/include/knl/knl_session.h b/src/include/knl/knl_session.h index bd51fed2f..139d8ea22 100644 --- a/src/include/knl/knl_session.h +++ b/src/include/knl/knl_session.h @@ -2746,6 +2746,7 @@ typedef struct knl_u_hook_context { void *plpgsqlParserSetHook; void *coreYYlexHook; void *getTypeZeroValueHook; + void *deparseQueryHook; } knl_u_hook_context; typedef struct knl_u_libsw_context { diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 00b7a0bc9..4dd31199d 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -914,6 +914,8 @@ extern char* deparse_alter_sequence(Node* stmt, bool owned_by_none = false); extern void get_hint_string(HintState* hstate, StringInfo buf); extern void deparse_query(Query* query, StringInfo buf, List* parentnamespace, bool finalise_aggs, bool sortgroup_colno, void* parserArg = NULL, bool qrw_phase = false, bool is_fqs = false); +typedef void (*deparse_query_func)(Query* query, StringInfo buf, List* parentnamespace, bool finalise_aggs, + bool sortgroup_colno, void* parserArg, bool qrw_phase, bool is_fqs); extern void deparse_targetlist(Query* query, List* targetList, StringInfo buf); #endif extern List* deparse_context_for(const char* aliasname, Oid relid);