diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2022-03-09 10:56:44 +0100 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2022-03-09 11:08:16 +0100 |
commit | df4c3cbd8f4f619785c735669150e3a1df9cf7ca (patch) | |
tree | 04cdd99397f5cfdb79a6d27f3736e6733fb4d48b /src/backend/parser | |
parent | ddf590b8115212ea061f9428f20f4c36d8e25e62 (diff) | |
download | postgresql-df4c3cbd8f4f619785c735669150e3a1df9cf7ca.tar.gz postgresql-df4c3cbd8f4f619785c735669150e3a1df9cf7ca.zip |
Add parse_analyze_withcb()
This extracts code from pg_analyze_and_rewrite_withcb() into a
separate function that mirrors the existing
parse_analyze_fixedparams() and parse_analyze_varparams().
Reviewed-by: Nathan Bossart <bossartn@amazon.com>
Discussion: https://www.postgresql.org/message-id/flat/c67ce276-52b4-0239-dc0e-39875bf81840@enterprisedb.com
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/analyze.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 53c11b3a156..61026753a3d 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -182,6 +182,44 @@ parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, } /* + * parse_analyze_withcb + * + * This variant is used when the caller supplies their own parser callback to + * resolve parameters and possibly other things. + */ +Query * +parse_analyze_withcb(RawStmt *parseTree, const char *sourceText, + ParserSetupHook parserSetup, + void *parserSetupArg, + QueryEnvironment *queryEnv) +{ + ParseState *pstate = make_parsestate(NULL); + Query *query; + JumbleState *jstate = NULL; + + Assert(sourceText != NULL); /* required as of 8.4 */ + + pstate->p_sourcetext = sourceText; + pstate->p_queryEnv = queryEnv; + (*parserSetup) (pstate, parserSetupArg); + + query = transformTopLevelStmt(pstate, parseTree); + + if (IsQueryIdEnabled()) + jstate = JumbleQuery(query, sourceText); + + if (post_parse_analyze_hook) + (*post_parse_analyze_hook) (pstate, query, jstate); + + free_parsestate(pstate); + + pgstat_report_query_id(query->queryId, false); + + return query; +} + + +/* * parse_sub_analyze * Entry point for recursively analyzing a sub-statement. */ |