mirror of
https://github.com/postgres/postgres.git
synced 2025-12-21 05:21:08 +03:00
Represent command completion tags as structs
The backend was using strings to represent command tags and doing string comparisons in multiple places, but that's slow and unhelpful. Create a new command list with a supporting structure to use instead; this is stored in a tag-list-file that can be tailored to specific purposes with a caller-definable C macro, similar to what we do for WAL resource managers. The first first such uses are a new CommandTag enum and a CommandTagBehavior struct. Replace numerous occurrences of char *completionTag with a QueryCompletion struct so that the code no longer stores information about completed queries in a cstring. Only at the last moment, in EndCommand(), does this get converted to a string. EventTriggerCacheItem no longer holds an array of palloc’d tag strings in sorted order, but rather just a Bitmapset over the CommandTags. Author: Mark Dilger, with unsolicited help from Álvaro Herrera Reviewed-by: John Naylor, Tom Lane Discussion: https://postgr.es/m/981A9DB4-3F0C-4DA5-88AD-CB9CFF4D6CAD@enterprisedb.com
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
#include "access/tupdesc.h"
|
||||
#include "lib/ilist.h"
|
||||
#include "nodes/params.h"
|
||||
#include "tcop/cmdtag.h"
|
||||
#include "utils/queryenvironment.h"
|
||||
|
||||
/* Forward declaration, to avoid including parsenodes.h here */
|
||||
@@ -95,7 +96,7 @@ typedef struct CachedPlanSource
|
||||
int magic; /* should equal CACHEDPLANSOURCE_MAGIC */
|
||||
struct RawStmt *raw_parse_tree; /* output of raw_parser(), or NULL */
|
||||
const char *query_string; /* source text of query */
|
||||
const char *commandTag; /* command tag (a constant!), or NULL */
|
||||
CommandTag commandTag; /* 'nuff said */
|
||||
Oid *param_types; /* array of parameter type OIDs, or NULL */
|
||||
int num_params; /* length of param_types array */
|
||||
ParserSetupHook parserSetup; /* alternative parameter spec method */
|
||||
@@ -186,10 +187,10 @@ extern void ResetPlanCache(void);
|
||||
|
||||
extern CachedPlanSource *CreateCachedPlan(struct RawStmt *raw_parse_tree,
|
||||
const char *query_string,
|
||||
const char *commandTag);
|
||||
CommandTag commandTag);
|
||||
extern CachedPlanSource *CreateOneShotCachedPlan(struct RawStmt *raw_parse_tree,
|
||||
const char *query_string,
|
||||
const char *commandTag);
|
||||
CommandTag commandTag);
|
||||
extern void CompleteCachedPlan(CachedPlanSource *plansource,
|
||||
List *querytree_list,
|
||||
MemoryContext querytree_context,
|
||||
|
||||
Reference in New Issue
Block a user