diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-05-06 19:47:30 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-05-06 19:47:30 +0000 |
commit | 282278899379a3a57fbc734bda6a4dc9cec3ce60 (patch) | |
tree | 624a0a024c5361836c8b1e1dd0030c99a5329e80 /src/backend/parser | |
parent | 15162aef24353215bc13b3d3b645d7065d5a58df (diff) | |
download | postgresql-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.y | 29 |
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); |