diff --git a/src/backend/commands/explain_state.c b/src/backend/commands/explain_state.c index 1d4be3c18ac..60d98d63a62 100644 --- a/src/backend/commands/explain_state.c +++ b/src/backend/commands/explain_state.c @@ -37,6 +37,9 @@ #include "commands/explain.h" #include "commands/explain_state.h" +/* Hook to perform additional EXPLAIN options validation */ +explain_validate_options_hook_type explain_validate_options_hook = NULL; + typedef struct { const char *option_name; @@ -196,6 +199,10 @@ ParseExplainOptionList(ExplainState *es, List *options, ParseState *pstate) /* if the summary was not set explicitly, set default value */ es->summary = (summary_set) ? es->summary : es->analyze; + + /* plugin specific option validation */ + if (explain_validate_options_hook) + (*explain_validate_options_hook) (es, options, pstate); } /* diff --git a/src/include/commands/explain_state.h b/src/include/commands/explain_state.h index 925097492b9..32728f5d1a1 100644 --- a/src/include/commands/explain_state.h +++ b/src/include/commands/explain_state.h @@ -78,6 +78,11 @@ typedef struct ExplainState typedef void (*ExplainOptionHandler) (ExplainState *, DefElem *, ParseState *); +/* Hook to perform additional EXPLAIN options validation */ +typedef void (*explain_validate_options_hook_type) (struct ExplainState *es, List *options, + ParseState *pstate); +extern PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook; + extern ExplainState *NewExplainState(void); extern void ParseExplainOptionList(ExplainState *es, List *options, ParseState *pstate);