Skip to content

Commit df4c3cb

Browse files
committed
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
1 parent ddf590b commit df4c3cb

File tree

3 files changed

+45
-20
lines changed

3 files changed

+45
-20
lines changed

src/backend/parser/analyze.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,44 @@ parse_analyze_varparams(RawStmt *parseTree, const char *sourceText,
181181
return query;
182182
}
183183

184+
/*
185+
* parse_analyze_withcb
186+
*
187+
* This variant is used when the caller supplies their own parser callback to
188+
* resolve parameters and possibly other things.
189+
*/
190+
Query *
191+
parse_analyze_withcb(RawStmt *parseTree, const char *sourceText,
192+
ParserSetupHook parserSetup,
193+
void *parserSetupArg,
194+
QueryEnvironment *queryEnv)
195+
{
196+
ParseState *pstate = make_parsestate(NULL);
197+
Query *query;
198+
JumbleState *jstate = NULL;
199+
200+
Assert(sourceText != NULL); /* required as of 8.4 */
201+
202+
pstate->p_sourcetext = sourceText;
203+
pstate->p_queryEnv = queryEnv;
204+
(*parserSetup) (pstate, parserSetupArg);
205+
206+
query = transformTopLevelStmt(pstate, parseTree);
207+
208+
if (IsQueryIdEnabled())
209+
jstate = JumbleQuery(query, sourceText);
210+
211+
if (post_parse_analyze_hook)
212+
(*post_parse_analyze_hook) (pstate, query, jstate);
213+
214+
free_parsestate(pstate);
215+
216+
pgstat_report_query_id(query->queryId, false);
217+
218+
return query;
219+
}
220+
221+
184222
/*
185223
* parse_sub_analyze
186224
* Entry point for recursively analyzing a sub-statement.

src/backend/tcop/postgres.c

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -736,12 +736,8 @@ pg_analyze_and_rewrite_withcb(RawStmt *parsetree,
736736
void *parserSetupArg,
737737
QueryEnvironment *queryEnv)
738738
{
739-
ParseState *pstate;
740739
Query *query;
741740
List *querytree_list;
742-
JumbleState *jstate = NULL;
743-
744-
Assert(query_string != NULL); /* required as of 8.4 */
745741

746742
TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
747743

@@ -751,22 +747,8 @@ pg_analyze_and_rewrite_withcb(RawStmt *parsetree,
751747
if (log_parser_stats)
752748
ResetUsage();
753749

754-
pstate = make_parsestate(NULL);
755-
pstate->p_sourcetext = query_string;
756-
pstate->p_queryEnv = queryEnv;
757-
(*parserSetup) (pstate, parserSetupArg);
758-
759-
query = transformTopLevelStmt(pstate, parsetree);
760-
761-
if (IsQueryIdEnabled())
762-
jstate = JumbleQuery(query, query_string);
763-
764-
if (post_parse_analyze_hook)
765-
(*post_parse_analyze_hook) (pstate, query, jstate);
766-
767-
free_parsestate(pstate);
768-
769-
pgstat_report_query_id(query->queryId, false);
750+
query = parse_analyze_withcb(parsetree, query_string, parserSetup, parserSetupArg,
751+
queryEnv);
770752

771753
if (log_parser_stats)
772754
ShowUsage("PARSE ANALYSIS STATISTICS");

src/include/parser/analyze.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#ifndef ANALYZE_H
1515
#define ANALYZE_H
1616

17+
#include "nodes/params.h"
1718
#include "parser/parse_node.h"
1819
#include "utils/queryjumble.h"
1920

@@ -28,6 +29,10 @@ extern Query *parse_analyze_fixedparams(RawStmt *parseTree, const char *sourceTe
2829
const Oid *paramTypes, int numParams, QueryEnvironment *queryEnv);
2930
extern Query *parse_analyze_varparams(RawStmt *parseTree, const char *sourceText,
3031
Oid **paramTypes, int *numParams, QueryEnvironment *queryEnv);
32+
extern Query *parse_analyze_withcb(RawStmt *parseTree, const char *sourceText,
33+
ParserSetupHook parserSetup,
34+
void *parserSetupArg,
35+
QueryEnvironment *queryEnv);
3136

3237
extern Query *parse_sub_analyze(Node *parseTree, ParseState *parentParseState,
3338
CommonTableExpr *parentCTE,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy