diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2007-09-03 18:46:30 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2007-09-03 18:46:30 +0000 |
commit | e7889b83b7059e776f0a3d76bbbdd98687f4592c (patch) | |
tree | e0b51d43d089c38a1debbe9d9d15499e68a548dd /src/include | |
parent | dd4594e332a86b563801b6bbed0a7d256dcd7e43 (diff) | |
download | postgresql-e7889b83b7059e776f0a3d76bbbdd98687f4592c.tar.gz postgresql-e7889b83b7059e776f0a3d76bbbdd98687f4592c.zip |
Support SET FROM CURRENT in CREATE/ALTER FUNCTION, ALTER DATABASE, ALTER ROLE.
(Actually, it works as a plain statement too, but I didn't document that
because it seems a bit useless.) Unify VariableResetStmt with
VariableSetStmt, and clean up some ancient cruft in the representation of
same.
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/nodes/nodes.h | 3 | ||||
-rw-r--r-- | src/include/nodes/parsenodes.h | 81 | ||||
-rw-r--r-- | src/include/utils/guc.h | 7 |
3 files changed, 45 insertions, 46 deletions
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index 7f6a08f450f..fa9d318509b 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/nodes.h,v 1.203 2007/08/21 01:11:27 tgl Exp $ + * $PostgreSQL: pgsql/src/include/nodes/nodes.h,v 1.204 2007/09/03 18:46:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -275,7 +275,6 @@ typedef enum NodeTag T_AlterSeqStmt, T_VariableSetStmt, T_VariableShowStmt, - T_VariableResetStmt, T_DiscardStmt, T_CreateTrigStmt, T_DropPropertyStmt, diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 79449c55847..412fadac54e 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.352 2007/08/22 05:13:50 tgl Exp $ + * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.353 2007/09/03 18:46:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1051,6 +1051,42 @@ typedef struct CopyStmt } CopyStmt; /* ---------------------- + * SET Statement (includes RESET) + * + * "SET var TO DEFAULT" and "RESET var" are semantically equivalent, but we + * preserve the distinction in VariableSetKind for CreateCommandTag(). + * ---------------------- + */ +typedef enum +{ + VAR_SET_VALUE, /* SET var = value */ + VAR_SET_DEFAULT, /* SET var TO DEFAULT */ + VAR_SET_CURRENT, /* SET var FROM CURRENT */ + VAR_SET_MULTI, /* special case for SET TRANSACTION ... */ + VAR_RESET, /* RESET var */ + VAR_RESET_ALL /* RESET ALL */ +} VariableSetKind; + +typedef struct VariableSetStmt +{ + NodeTag type; + VariableSetKind kind; + char *name; /* variable to be set */ + List *args; /* List of A_Const nodes */ + bool is_local; /* SET LOCAL? */ +} VariableSetStmt; + +/* ---------------------- + * Show Statement + * ---------------------- + */ +typedef struct VariableShowStmt +{ + NodeTag type; + char *name; +} VariableShowStmt; + +/* ---------------------- * Create Table Statement * * NOTE: in the raw gram.y output, ColumnDef, Constraint, and FkConstraint @@ -1264,8 +1300,7 @@ typedef struct AlterRoleSetStmt { NodeTag type; char *role; /* role name */ - char *variable; /* GUC variable name */ - List *value; /* value for variable, or NIL for Reset */ + VariableSetStmt *setstmt; /* SET or RESET subcommand */ } AlterRoleSetStmt; typedef struct DropRoleStmt @@ -1781,9 +1816,8 @@ typedef struct AlterDatabaseStmt typedef struct AlterDatabaseSetStmt { NodeTag type; - char *dbname; - char *variable; - List *value; + char *dbname; /* database name */ + VariableSetStmt *setstmt; /* SET or RESET subcommand */ } AlterDatabaseSetStmt; /* ---------------------- @@ -1849,41 +1883,6 @@ typedef struct CheckPointStmt } CheckPointStmt; /* ---------------------- - * Set Statement - * ---------------------- - */ - -typedef struct VariableSetStmt -{ - NodeTag type; - char *name; - List *args; - bool is_local; /* SET LOCAL */ -} VariableSetStmt; - -/* ---------------------- - * Show Statement - * ---------------------- - */ - -typedef struct VariableShowStmt -{ - NodeTag type; - char *name; -} VariableShowStmt; - -/* ---------------------- - * Reset Statement - * ---------------------- - */ - -typedef struct VariableResetStmt -{ - NodeTag type; - char *name; -} VariableResetStmt; - -/* ---------------------- * Discard Statement * ---------------------- */ diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 5dd06ee7a12..d8fafff5590 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -7,12 +7,13 @@ * Copyright (c) 2000-2007, PostgreSQL Global Development Group * Written by Peter Eisentraut <peter_e@gmx.net>. * - * $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.84 2007/09/03 00:39:25 tgl Exp $ + * $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.85 2007/09/03 18:46:30 tgl Exp $ *-------------------------------------------------------------------- */ #ifndef GUC_H #define GUC_H +#include "nodes/parsenodes.h" #include "tcop/dest.h" #include "utils/array.h" @@ -203,9 +204,9 @@ extern int GetNumConfigOptions(void); extern void SetPGVariable(const char *name, List *args, bool is_local); extern void GetPGVariable(const char *name, DestReceiver *dest); extern TupleDesc GetPGVariableResultDesc(const char *name); -extern void ResetPGVariable(const char *name, bool isTopLevel); -extern char *flatten_set_variable_args(const char *name, List *args); +extern void ExecSetVariableStmt(VariableSetStmt *stmt); +extern char *ExtractSetVariableArgs(VariableSetStmt *stmt); extern void ProcessGUCArray(ArrayType *array, GucContext context, GucSource source, bool isLocal); |