diff --git a/src/common/backend/utils/adt/ruleutils.cpp b/src/common/backend/utils/adt/ruleutils.cpp index 15c9933bc..7f348dc36 100644 --- a/src/common/backend/utils/adt/ruleutils.cpp +++ b/src/common/backend/utils/adt/ruleutils.cpp @@ -5806,6 +5806,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 e672b35f9..29f406e35 100644 --- a/src/include/knl/knl_session.h +++ b/src/include/knl/knl_session.h @@ -2878,6 +2878,7 @@ typedef struct knl_u_hook_context { void *pluginSpiExecuteMultiResHook; void *pluginMultiResExceptionHook; 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 f276fa67d..b9f180218 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);