aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/extension.c4
-rw-r--r--src/backend/commands/schemacmds.c4
-rw-r--r--src/backend/commands/trigger.c3
-rw-r--r--src/backend/executor/functions.c4
-rw-r--r--src/backend/executor/spi.c4
-rw-r--r--src/backend/tcop/pquery.c5
-rw-r--r--src/backend/tcop/utility.c62
-rw-r--r--src/include/tcop/utility.h17
8 files changed, 55 insertions, 48 deletions
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 36df8bddcad..2d84ac8620d 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -750,10 +750,10 @@ execute_sql_string(const char *sql, const char *filename)
{
ProcessUtility(stmt,
sql,
+ PROCESS_UTILITY_QUERY,
NULL,
dest,
- NULL,
- PROCESS_UTILITY_QUERY);
+ NULL);
}
PopActiveSnapshot();
diff --git a/src/backend/commands/schemacmds.c b/src/backend/commands/schemacmds.c
index 21d7e608df4..1d13ba0d304 100644
--- a/src/backend/commands/schemacmds.c
+++ b/src/backend/commands/schemacmds.c
@@ -151,10 +151,10 @@ CreateSchemaCommand(CreateSchemaStmt *stmt, const char *queryString)
/* do this step */
ProcessUtility(stmt,
queryString,
+ PROCESS_UTILITY_SUBCOMMAND,
NULL,
None_Receiver,
- NULL,
- PROCESS_UTILITY_SUBCOMMAND);
+ NULL);
/* make sure later steps can see the object created here */
CommandCounterIncrement();
}
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index bebb551f7fa..a0473498bd2 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -1014,7 +1014,8 @@ ConvertTriggerToFK(CreateTrigStmt *stmt, Oid funcoid)
/* ... and execute it */
ProcessUtility((Node *) atstmt,
"(generated ALTER TABLE ADD FOREIGN KEY command)",
- NULL, None_Receiver, NULL, PROCESS_UTILITY_GENERATED);
+ PROCESS_UTILITY_SUBCOMMAND, NULL,
+ None_Receiver, NULL);
/* Remove the matched item from the list */
info_list = list_delete_ptr(info_list, info);
diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c
index c908f34cfe4..dbb4805ae2c 100644
--- a/src/backend/executor/functions.c
+++ b/src/backend/executor/functions.c
@@ -831,10 +831,10 @@ postquel_getnext(execution_state *es, SQLFunctionCachePtr fcache)
(Node *) es->qd->plannedstmt :
es->qd->utilitystmt),
fcache->src,
+ PROCESS_UTILITY_QUERY,
es->qd->params,
es->qd->dest,
- NULL,
- PROCESS_UTILITY_QUERY);
+ NULL);
result = true; /* never stops early */
}
else
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index de8d59a8cdc..ca0d05d2cc0 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -2093,10 +2093,10 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI,
ProcessUtility(stmt,
plansource->query_string,
+ PROCESS_UTILITY_QUERY,
paramLI,
dest,
- completionTag,
- PROCESS_UTILITY_QUERY);
+ completionTag);
/* Update "processed" if stmt returned tuples */
if (_SPI_current->tuptable)
diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c
index 107d8aedab4..2c3156a2e94 100644
--- a/src/backend/tcop/pquery.c
+++ b/src/backend/tcop/pquery.c
@@ -1184,11 +1184,10 @@ PortalRunUtility(Portal portal, Node *utilityStmt, bool isTopLevel,
ProcessUtility(utilityStmt,
portal->sourceText,
+ isTopLevel ? PROCESS_UTILITY_TOPLEVEL : PROCESS_UTILITY_QUERY,
portal->portalParams,
dest,
- completionTag,
- isTopLevel ?
- PROCESS_UTILITY_TOPLEVEL : PROCESS_UTILITY_QUERY);
+ completionTag);
/* Some utility statements may change context on us */
MemoryContextSwitchTo(PortalGetHeapMemory(portal));
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 2710db12321..c9408970b10 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -71,10 +71,10 @@ ProcessUtility_hook_type ProcessUtility_hook = NULL;
/* local function declarations */
static void ProcessUtilitySlow(Node *parsetree,
const char *queryString,
+ ProcessUtilityContext context,
ParamListInfo params,
DestReceiver *dest,
- char *completionTag,
- ProcessUtilityContext context);
+ char *completionTag);
static void ExecDropStmt(DropStmt *stmt, bool isTopLevel);
@@ -314,8 +314,9 @@ CheckRestrictedOperation(const char *cmdname)
*
* parsetree: the parse tree for the utility statement
* queryString: original source text of command
+ * context: identifies source of statement (toplevel client command,
+ * non-toplevel client command, subcommand of a larger utility command)
* params: parameters to use during execution
- * isTopLevel: true if executing a "top level" (interactively issued) command
* dest: where to send results
* completionTag: points to a buffer of size COMPLETION_TAG_BUFSIZE
* in which to store a command completion status string.
@@ -331,10 +332,10 @@ CheckRestrictedOperation(const char *cmdname)
void
ProcessUtility(Node *parsetree,
const char *queryString,
+ ProcessUtilityContext context,
ParamListInfo params,
DestReceiver *dest,
- char *completionTag,
- ProcessUtilityContext context)
+ char *completionTag)
{
Assert(queryString != NULL); /* required as of 8.4 */
@@ -344,11 +345,13 @@ ProcessUtility(Node *parsetree,
* call standard_ProcessUtility().
*/
if (ProcessUtility_hook)
- (*ProcessUtility_hook) (parsetree, queryString, params,
- dest, completionTag, context);
+ (*ProcessUtility_hook) (parsetree, queryString,
+ context, params,
+ dest, completionTag);
else
- standard_ProcessUtility(parsetree, queryString, params,
- dest, completionTag, context);
+ standard_ProcessUtility(parsetree, queryString,
+ context, params,
+ dest, completionTag);
}
/*
@@ -365,10 +368,10 @@ ProcessUtility(Node *parsetree,
void
standard_ProcessUtility(Node *parsetree,
const char *queryString,
+ ProcessUtilityContext context,
ParamListInfo params,
DestReceiver *dest,
- char *completionTag,
- ProcessUtilityContext context)
+ char *completionTag)
{
bool isTopLevel = (context == PROCESS_UTILITY_TOPLEVEL);
@@ -817,8 +820,9 @@ standard_ProcessUtility(Node *parsetree,
DropStmt *stmt = (DropStmt *) parsetree;
if (EventTriggerSupportsObjectType(stmt->removeType))
- ProcessUtilitySlow(parsetree, queryString, params,
- dest, completionTag, context);
+ ProcessUtilitySlow(parsetree, queryString,
+ context, params,
+ dest, completionTag);
else
ExecDropStmt(stmt, isTopLevel);
}
@@ -829,8 +833,9 @@ standard_ProcessUtility(Node *parsetree,
RenameStmt *stmt = (RenameStmt *) parsetree;
if (EventTriggerSupportsObjectType(stmt->renameType))
- ProcessUtilitySlow(parsetree, queryString, params,
- dest, completionTag, context);
+ ProcessUtilitySlow(parsetree, queryString,
+ context, params,
+ dest, completionTag);
else
ExecRenameStmt(stmt);
}
@@ -841,8 +846,9 @@ standard_ProcessUtility(Node *parsetree,
AlterObjectSchemaStmt *stmt = (AlterObjectSchemaStmt *) parsetree;
if (EventTriggerSupportsObjectType(stmt->objectType))
- ProcessUtilitySlow(parsetree, queryString, params,
- dest, completionTag, context);
+ ProcessUtilitySlow(parsetree, queryString,
+ context, params,
+ dest, completionTag);
else
ExecAlterObjectSchemaStmt(stmt);
}
@@ -853,8 +859,9 @@ standard_ProcessUtility(Node *parsetree,
AlterOwnerStmt *stmt = (AlterOwnerStmt *) parsetree;
if (EventTriggerSupportsObjectType(stmt->objectType))
- ProcessUtilitySlow(parsetree, queryString, params,
- dest, completionTag, context);
+ ProcessUtilitySlow(parsetree, queryString,
+ context, params,
+ dest, completionTag);
else
ExecAlterOwnerStmt(stmt);
}
@@ -862,8 +869,9 @@ standard_ProcessUtility(Node *parsetree,
default:
/* All other statement types have event trigger support */
- ProcessUtilitySlow(parsetree, queryString, params,
- dest, completionTag, context);
+ ProcessUtilitySlow(parsetree, queryString,
+ context, params,
+ dest, completionTag);
break;
}
}
@@ -876,10 +884,10 @@ standard_ProcessUtility(Node *parsetree,
static void
ProcessUtilitySlow(Node *parsetree,
const char *queryString,
+ ProcessUtilityContext context,
ParamListInfo params,
DestReceiver *dest,
- char *completionTag,
- ProcessUtilityContext context)
+ char *completionTag)
{
bool isTopLevel = (context == PROCESS_UTILITY_TOPLEVEL);
bool isCompleteQuery = (context <= PROCESS_UTILITY_QUERY);
@@ -966,10 +974,10 @@ ProcessUtilitySlow(Node *parsetree,
/* Recurse for anything else */
ProcessUtility(stmt,
queryString,
+ PROCESS_UTILITY_SUBCOMMAND,
params,
None_Receiver,
- NULL,
- PROCESS_UTILITY_GENERATED);
+ NULL);
}
/* Need CCI between commands */
@@ -1017,10 +1025,10 @@ ProcessUtilitySlow(Node *parsetree,
/* Recurse for anything else */
ProcessUtility(stmt,
queryString,
+ PROCESS_UTILITY_SUBCOMMAND,
params,
None_Receiver,
- NULL,
- PROCESS_UTILITY_GENERATED);
+ NULL);
}
/* Need CCI between commands */
diff --git a/src/include/tcop/utility.h b/src/include/tcop/utility.h
index 0697678979a..9864447b726 100644
--- a/src/include/tcop/utility.h
+++ b/src/include/tcop/utility.h
@@ -20,23 +20,22 @@ typedef enum
{
PROCESS_UTILITY_TOPLEVEL, /* toplevel interactive command */
PROCESS_UTILITY_QUERY, /* a complete query, but not toplevel */
- PROCESS_UTILITY_SUBCOMMAND, /* a piece of a query */
- PROCESS_UTILITY_GENERATED /* internally generated node query node */
+ PROCESS_UTILITY_SUBCOMMAND /* a portion of a query */
} ProcessUtilityContext;
/* Hook for plugins to get control in ProcessUtility() */
typedef void (*ProcessUtility_hook_type) (Node *parsetree,
- const char *queryString, ParamListInfo params,
- DestReceiver *dest, char *completionTag,
- ProcessUtilityContext context);
+ const char *queryString, ProcessUtilityContext context,
+ ParamListInfo params,
+ DestReceiver *dest, char *completionTag);
extern PGDLLIMPORT ProcessUtility_hook_type ProcessUtility_hook;
extern void ProcessUtility(Node *parsetree, const char *queryString,
- ParamListInfo params, DestReceiver *dest, char *completionTag,
- ProcessUtilityContext context);
+ ProcessUtilityContext context, ParamListInfo params,
+ DestReceiver *dest, char *completionTag);
extern void standard_ProcessUtility(Node *parsetree, const char *queryString,
- ParamListInfo params, DestReceiver *dest,
- char *completionTag, ProcessUtilityContext context);
+ ProcessUtilityContext context, ParamListInfo params,
+ DestReceiver *dest, char *completionTag);
extern bool UtilityReturnsTuples(Node *parsetree);