summaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1999-11-30 03:57:29 +0000
committerBruce Momjian <bruce@momjian.us>1999-11-30 03:57:29 +0000
commiteebfb9baa517b2680cf963b74e4c6a9fb12a1df2 (patch)
treef8ceb89757f3910de48346cf0a0290528cc40ceb /src/backend/parser
parent3ab5b1f1e661840c191dbba9d2985c17766896ef (diff)
create/alter user extension
This one should work much better than the one I sent in previously. The functionality is the same, but the patch was missing one file resulting in the compilation failing. The docs also received a minor fix. Peter Eisentraut Sernanders väg 10:115
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/gram.y82
-rw-r--r--src/backend/parser/keywords.c3
2 files changed, 65 insertions, 20 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 5a291dc867f..c3d72896f65 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.115 1999/11/20 21:39:36 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.116 1999/11/30 03:57:24 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -137,6 +137,7 @@ static Node *doNegate(Node *n);
%type <pboolean> user_createdb_clause, user_createuser_clause
%type <str> user_passwd_clause
+%type <ival> sysid_clause
%type <str> user_valid_clause
%type <list> user_group_list, user_group_clause
@@ -295,6 +296,7 @@ static Node *doNegate(Node *n);
VALUES, VARCHAR, VARYING, VIEW,
WHEN, WHERE, WITH, WORK, YEAR_P, ZONE
+
/* Keywords (in SQL3 reserved words) */
%token DEFERRABLE, DEFERRED,
IMMEDIATE, INITIALLY,
@@ -323,7 +325,7 @@ static Node *doNegate(Node *n);
NEW, NOCREATEDB, NOCREATEUSER, NONE, NOTHING, NOTIFY, NOTNULL,
OFFSET, OIDS, OPERATOR, PASSWORD, PROCEDURAL,
RENAME, RESET, RETURNS, ROW, RULE,
- SEQUENCE, SERIAL, SETOF, SHARE, SHOW, START, STATEMENT, STDIN, STDOUT,
+ SEQUENCE, SERIAL, SETOF, SHARE, SHOW, START, STATEMENT, STDIN, STDOUT, SYSID,
TRUNCATE, TRUSTED,
UNLISTEN, UNTIL, VACUUM, VALID, VERBOSE, VERSION
@@ -443,18 +445,34 @@ stmt : AddAttrStmt
*
*****************************************************************************/
-CreateUserStmt: CREATE USER UserId user_passwd_clause user_createdb_clause
- user_createuser_clause user_group_clause user_valid_clause
+CreateUserStmt: CREATE USER UserId
+ user_createdb_clause user_createuser_clause user_group_clause
+ user_valid_clause
{
CreateUserStmt *n = makeNode(CreateUserStmt);
n->user = $3;
- n->password = $4;
- n->createdb = $5;
- n->createuser = $6;
- n->groupElts = $7;
- n->validUntil = $8;
+ n->sysid = -1;
+ n->password = NULL;
+ n->createdb = $4;
+ n->createuser = $5;
+ n->groupElts = $6;
+ n->validUntil = $7;
$$ = (Node *)n;
}
+ | CREATE USER UserId WITH sysid_clause user_passwd_clause
+ user_createdb_clause user_createuser_clause user_group_clause
+ user_valid_clause
+ {
+ CreateUserStmt *n = makeNode(CreateUserStmt);
+ n->user = $3;
+ n->sysid = $5;
+ n->password = $6;
+ n->createdb = $7;
+ n->createuser = $8;
+ n->groupElts = $9;
+ n->validUntil = $10;
+ $$ = (Node *)n;
+ }
;
/*****************************************************************************
@@ -464,16 +482,31 @@ CreateUserStmt: CREATE USER UserId user_passwd_clause user_createdb_clause
*
*****************************************************************************/
-AlterUserStmt: ALTER USER UserId user_passwd_clause user_createdb_clause
- user_createuser_clause user_group_clause user_valid_clause
+AlterUserStmt: ALTER USER UserId user_createdb_clause
+ user_createuser_clause user_group_clause user_valid_clause
{
AlterUserStmt *n = makeNode(AlterUserStmt);
n->user = $3;
- n->password = $4;
- n->createdb = $5;
- n->createuser = $6;
- n->groupElts = $7;
- n->validUntil = $8;
+ n->sysid = -1;
+ n->password = NULL;
+ n->createdb = $4;
+ n->createuser = $5;
+ n->groupElts = $6;
+ n->validUntil = $7;
+ $$ = (Node *)n;
+ }
+ | ALTER USER UserId WITH sysid_clause user_passwd_clause
+ user_createdb_clause
+ user_createuser_clause user_group_clause user_valid_clause
+ {
+ AlterUserStmt *n = makeNode(AlterUserStmt);
+ n->user = $3;
+ n->sysid = $5;
+ n->password = $6;
+ n->createdb = $7;
+ n->createuser = $8;
+ n->groupElts = $9;
+ n->validUntil = $10;
$$ = (Node *)n;
}
;
@@ -493,10 +526,14 @@ DropUserStmt: DROP USER UserId
}
;
-user_passwd_clause: WITH PASSWORD UserId { $$ = $3; }
- | /*EMPTY*/ { $$ = NULL; }
+user_passwd_clause: PASSWORD UserId { $$ = $2; }
+ | /*EMPTY*/ { $$ = NULL; }
;
+sysid_clause: SYSID Iconst { $$ = $2; }
+ | /*EMPTY*/ { $$ = -1; }
+ ;
+
user_createdb_clause: CREATEDB
{
bool* b;
@@ -537,7 +574,13 @@ user_group_list: user_group_list ',' UserId
}
;
-user_group_clause: IN GROUP user_group_list { $$ = $3; }
+user_group_clause: IN GROUP user_group_list
+ {
+ /* the backend doesn't actually process this,
+ * so an error message is probably fairer */
+ yyerror("IN GROUP is not implemented");
+ /* $$ = $3; */
+ }
| /*EMPTY*/ { $$ = NULL; }
;
@@ -4764,6 +4807,7 @@ ColId: IDENT { $$ = $1; }
| STATEMENT { $$ = "statement"; }
| STDIN { $$ = "stdin"; }
| STDOUT { $$ = "stdout"; }
+ | SYSID { $$ = "sysid"; }
| TIME { $$ = "time"; }
| TIMESTAMP { $$ = "timestamp"; }
| TIMEZONE_HOUR { $$ = "timezone_hour"; }
diff --git a/src/backend/parser/keywords.c b/src/backend/parser/keywords.c
index 392e7509c8e..3cb4e2787d5 100644
--- a/src/backend/parser/keywords.c
+++ b/src/backend/parser/keywords.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.63 1999/10/15 01:49:41 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.64 1999/11/30 03:57:26 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -219,6 +219,7 @@ static ScanKeyword ScanKeywords[] = {
{"stdin", STDIN},
{"stdout", STDOUT},
{"substring", SUBSTRING},
+ {"sysid", SYSID},
{"table", TABLE},
{"temp", TEMP},
{"temporary", TEMPORARY},