aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-05-06 19:47:30 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-05-06 19:47:30 +0000
commit282278899379a3a57fbc734bda6a4dc9cec3ce60 (patch)
tree624a0a024c5361836c8b1e1dd0030c99a5329e80 /src/backend/parser
parent15162aef24353215bc13b3d3b645d7065d5a58df (diff)
downloadpostgresql-282278899379a3a57fbc734bda6a4dc9cec3ce60.tar.gz
postgresql-282278899379a3a57fbc734bda6a4dc9cec3ce60.zip
Accept SET SESSION AUTHORIZATION DEFAULT and RESET SESSION AUTHORIZATION
to reset session userid to the originally-authenticated name. Also, relax SET SESSION AUTHORIZATION to allow specifying one's own username even if one is not superuser, so as to avoid unnecessary error messages when loading a pg_dump file that uses this command. Per discussion from several months ago.
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/gram.y29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 1d1b7a78a29..258a11c1183 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.312 2002/05/03 00:32:16 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.313 2002/05/06 19:47:30 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -281,7 +281,7 @@ static void doNegateFloat(Value *v);
%type <ival> Iconst
%type <str> Sconst, comment_text
%type <str> UserId, opt_boolean, ColId_or_Sconst
-%type <list> var_list
+%type <list> var_list, var_list_or_default
%type <str> ColId, ColLabel, type_name
%type <node> var_value, zone_value
@@ -833,14 +833,14 @@ schema_stmt: CreateStmt
*
*****************************************************************************/
-VariableSetStmt: SET ColId TO var_list
+VariableSetStmt: SET ColId TO var_list_or_default
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->name = $2;
n->args = $4;
$$ = (Node *) n;
}
- | SET ColId '=' var_list
+ | SET ColId '=' var_list_or_default
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->name = $2;
@@ -884,14 +884,25 @@ VariableSetStmt: SET ColId TO var_list
n->args = makeList1(makeStringConst($4, NULL));
$$ = (Node *) n;
}
+ | SET SESSION AUTHORIZATION DEFAULT
+ {
+ VariableSetStmt *n = makeNode(VariableSetStmt);
+ n->name = "session_authorization";
+ n->args = NIL;
+ $$ = (Node *) n;
+ }
+ ;
+
+var_list_or_default: var_list
+ { $$ = $1; }
+ | DEFAULT
+ { $$ = NIL; }
;
var_list: var_value
{ $$ = makeList1($1); }
| var_list ',' var_value
{ $$ = lappend($1, $3); }
- | DEFAULT
- { $$ = NIL; }
;
var_value: opt_boolean
@@ -1017,6 +1028,12 @@ VariableResetStmt: RESET ColId
n->name = "XactIsoLevel";
$$ = (Node *) n;
}
+ | RESET SESSION AUTHORIZATION
+ {
+ VariableResetStmt *n = makeNode(VariableResetStmt);
+ n->name = "session_authorization";
+ $$ = (Node *) n;
+ }
| RESET ALL
{
VariableResetStmt *n = makeNode(VariableResetStmt);