Skip to content

Commit f91ee12

Browse files
committed
Simplify optional WITH handling in CREATE USER, ALTER USER, CREATE
GROUP. Make WITH optional in CREATE DATABASE for consistency.
1 parent 0daee96 commit f91ee12

File tree

2 files changed

+50
-65
lines changed

2 files changed

+50
-65
lines changed

doc/src/sgml/ref/create_database.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.27 2002/04/21 19:02:39 thomas Exp $
2+
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.28 2002/06/17 05:40:32 momjian Exp $
33
PostgreSQL documentation
44
-->
55

@@ -22,7 +22,7 @@ PostgreSQL documentation
2222
</refsynopsisdivinfo>
2323
<synopsis>
2424
CREATE DATABASE <replaceable class="PARAMETER">name</replaceable>
25-
[ WITH [ OWNER [=] <replaceable class="parameter">dbowner</replaceable> ]
25+
[ [ WITH ] [ OWNER [=] <replaceable class="parameter">dbowner</replaceable> ]
2626
[ LOCATION [=] '<replaceable class="parameter">dbpath</replaceable>' ]
2727
[ TEMPLATE [=] <replaceable class="parameter">template</replaceable> ]
2828
[ ENCODING [=] <replaceable class="parameter">encoding</replaceable> ] ]

src/backend/parser/gram.y

Lines changed: 48 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.323 2002/06/15 03:00:03 thomas Exp $
14+
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.324 2002/06/17 05:40:32 momjian Exp $
1515
*
1616
* HISTORY
1717
* AUTHOR DATE MAJOR EVENT
@@ -201,7 +201,7 @@ static void doNegateFloat(Value *v);
201201

202202
%type <list> stmtblock, stmtmulti,
203203
OptTableElementList, OptInherit, definition, opt_distinct,
204-
opt_with, func_args, func_args_list, func_as, createfunc_opt_list
204+
opt_definition, func_args, func_args_list, func_as, createfunc_opt_list
205205
oper_argtypes, RuleActionList, RuleActionMulti,
206206
opt_column_list, columnList, opt_name_list,
207207
sort_clause, sortby_list, index_params, index_list, name_list,
@@ -232,7 +232,7 @@ static void doNegateFloat(Value *v);
232232
%type <ival> opt_interval
233233
%type <node> overlay_placing, substr_from, substr_for
234234

235-
%type <boolean> opt_binary, opt_using, opt_instead, opt_cursor
235+
%type <boolean> opt_binary, opt_using, opt_instead, opt_cursor, opt_with
236236
%type <boolean> opt_with_copy, index_opt_unique, opt_verbose, opt_full
237237
%type <boolean> opt_freeze, analyze_keyword
238238

@@ -469,7 +469,7 @@ stmt : AlterDatabaseSetStmt
469469
| CreateUserStmt
470470
| ClusterStmt
471471
| DefineStmt
472-
| DropStmt
472+
| DropStmt
473473
| DropSchemaStmt
474474
| TruncateStmt
475475
| CommentStmt
@@ -518,20 +518,18 @@ stmt : AlterDatabaseSetStmt
518518
*
519519
*****************************************************************************/
520520

521-
CreateUserStmt: CREATE USER UserId OptUserList
522-
{
523-
CreateUserStmt *n = makeNode(CreateUserStmt);
524-
n->user = $3;
525-
n->options = $4;
526-
$$ = (Node *)n;
527-
}
528-
| CREATE USER UserId WITH OptUserList
521+
CreateUserStmt: CREATE USER UserId opt_with OptUserList
529522
{
530523
CreateUserStmt *n = makeNode(CreateUserStmt);
531524
n->user = $3;
532525
n->options = $5;
533526
$$ = (Node *)n;
534-
}
527+
}
528+
;
529+
530+
531+
opt_with: WITH { $$ = TRUE; }
532+
| /*EMPTY*/ { $$ = TRUE; }
535533
;
536534

537535
/*****************************************************************************
@@ -541,14 +539,7 @@ CreateUserStmt: CREATE USER UserId OptUserList
541539
*
542540
*****************************************************************************/
543541

544-
AlterUserStmt: ALTER USER UserId OptUserList
545-
{
546-
AlterUserStmt *n = makeNode(AlterUserStmt);
547-
n->user = $3;
548-
n->options = $4;
549-
$$ = (Node *)n;
550-
}
551-
| ALTER USER UserId WITH OptUserList
542+
AlterUserStmt: ALTER USER UserId opt_with OptUserList
552543
{
553544
AlterUserStmt *n = makeNode(AlterUserStmt);
554545
n->user = $3;
@@ -600,19 +591,19 @@ OptUserList: OptUserList OptUserElem { $$ = lappend($1, $2); }
600591
;
601592

602593
OptUserElem: PASSWORD Sconst
603-
{
594+
{
604595
$$ = makeNode(DefElem);
605596
$$->defname = "password";
606597
$$->arg = (Node *)makeString($2);
607598
}
608599
| ENCRYPTED PASSWORD Sconst
609-
{
600+
{
610601
$$ = makeNode(DefElem);
611602
$$->defname = "encryptedPassword";
612603
$$->arg = (Node *)makeString($3);
613604
}
614605
| UNENCRYPTED PASSWORD Sconst
615-
{
606+
{
616607
$$ = makeNode(DefElem);
617608
$$->defname = "unencryptedPassword";
618609
$$->arg = (Node *)makeString($3);
@@ -624,37 +615,37 @@ OptUserElem: PASSWORD Sconst
624615
$$->arg = (Node *)makeInteger($2);
625616
}
626617
| CREATEDB
627-
{
618+
{
628619
$$ = makeNode(DefElem);
629620
$$->defname = "createdb";
630621
$$->arg = (Node *)makeInteger(TRUE);
631622
}
632623
| NOCREATEDB
633-
{
624+
{
634625
$$ = makeNode(DefElem);
635626
$$->defname = "createdb";
636627
$$->arg = (Node *)makeInteger(FALSE);
637628
}
638629
| CREATEUSER
639-
{
630+
{
640631
$$ = makeNode(DefElem);
641632
$$->defname = "createuser";
642633
$$->arg = (Node *)makeInteger(TRUE);
643634
}
644635
| NOCREATEUSER
645-
{
636+
{
646637
$$ = makeNode(DefElem);
647638
$$->defname = "createuser";
648639
$$->arg = (Node *)makeInteger(FALSE);
649640
}
650641
| IN_P GROUP_P user_list
651-
{
642+
{
652643
$$ = makeNode(DefElem);
653644
$$->defname = "groupElts";
654645
$$->arg = (Node *)$3;
655646
}
656647
| VALID UNTIL Sconst
657-
{
648+
{
658649
$$ = makeNode(DefElem);
659650
$$->defname = "validUntil";
660651
$$->arg = (Node *)makeString($3);
@@ -680,14 +671,7 @@ user_list: user_list ',' UserId
680671
*
681672
*****************************************************************************/
682673

683-
CreateGroupStmt: CREATE GROUP_P UserId OptGroupList
684-
{
685-
CreateGroupStmt *n = makeNode(CreateGroupStmt);
686-
n->name = $3;
687-
n->options = $4;
688-
$$ = (Node *)n;
689-
}
690-
| CREATE GROUP_P UserId WITH OptGroupList
674+
CreateGroupStmt: CREATE GROUP_P UserId opt_with OptGroupList
691675
{
692676
CreateGroupStmt *n = makeNode(CreateGroupStmt);
693677
n->name = $3;
@@ -704,7 +688,7 @@ OptGroupList: OptGroupList OptGroupElem { $$ = lappend($1, $2); }
704688
;
705689

706690
OptGroupElem: USER user_list
707-
{
691+
{
708692
$$ = makeNode(DefElem);
709693
$$->defname = "userElts";
710694
$$->arg = (Node *)$2;
@@ -1504,7 +1488,7 @@ ColConstraintElem:
15041488
n->keys = NULL;
15051489
$$ = (Node *)n;
15061490
}
1507-
| REFERENCES qualified_name opt_column_list key_match key_actions
1491+
| REFERENCES qualified_name opt_column_list key_match key_actions
15081492
{
15091493
FkConstraint *n = makeNode(FkConstraint);
15101494
n->constr_name = NULL;
@@ -1880,7 +1864,7 @@ DropPLangStmt: DROP opt_procedural LANGUAGE ColId_or_Sconst
18801864
opt_procedural: PROCEDURAL { $$ = TRUE; }
18811865
| /*EMPTY*/ { $$ = TRUE; }
18821866
;
1883-
1867+
18841868
/*****************************************************************************
18851869
*
18861870
* QUERIES :
@@ -1913,7 +1897,7 @@ CreateTrigStmt: CREATE TRIGGER name TriggerActionTime TriggerEvents ON
19131897
$$ = (Node *)n;
19141898
}
19151899
| CREATE CONSTRAINT TRIGGER name AFTER TriggerEvents ON
1916-
qualified_name OptConstrFromTable
1900+
qualified_name OptConstrFromTable
19171901
ConstraintAttributeSpec
19181902
FOR EACH ROW EXECUTE PROCEDURE
19191903
func_name '(' TriggerFuncArgs ')'
@@ -2237,13 +2221,13 @@ TruncateStmt: TRUNCATE opt_table qualified_name
22372221
* the object associated with the comment. The form of the statement is:
22382222
*
22392223
* COMMENT ON [ [ DATABASE | DOMAIN | INDEX | SEQUENCE | TABLE | TYPE | VIEW ]
2240-
* <objname> | AGGREGATE <aggname> (<aggtype>) | FUNCTION
2241-
* <funcname> (arg1, arg2, ...) | OPERATOR <op>
2224+
* <objname> | AGGREGATE <aggname> (<aggtype>) | FUNCTION
2225+
* <funcname> (arg1, arg2, ...) | OPERATOR <op>
22422226
* (leftoperand_typ rightoperand_typ) | TRIGGER <triggername> ON
22432227
* <relname> | RULE <rulename> ON <relname> ] IS 'text'
22442228
*
22452229
*****************************************************************************/
2246-
2230+
22472231
CommentStmt: COMMENT ON comment_type any_name IS comment_text
22482232
{
22492233
CommentStmt *n = makeNode(CommentStmt);
@@ -2319,12 +2303,12 @@ comment_type: COLUMN { $$ = COLUMN; }
23192303
| DOMAIN_P { $$ = TYPE_P; }
23202304
| TYPE_P { $$ = TYPE_P; }
23212305
| VIEW { $$ = VIEW; }
2322-
;
2306+
;
23232307

23242308
comment_text: Sconst { $$ = $1; }
23252309
| NULL_P { $$ = NULL; }
23262310
;
2327-
2311+
23282312
/*****************************************************************************
23292313
*
23302314
* QUERY:
@@ -2775,7 +2759,7 @@ RecipeStmt: EXECUTE RECIPE recipe_name
27752759
*****************************************************************************/
27762760

27772761
CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args
2778-
RETURNS func_return createfunc_opt_list opt_with
2762+
RETURNS func_return createfunc_opt_list opt_definition
27792763
{
27802764
CreateFunctionStmt *n = makeNode(CreateFunctionStmt);
27812765
n->replace = $2;
@@ -2951,7 +2935,7 @@ func_as: Sconst
29512935
{ $$ = makeList2(makeString($1), makeString($3)); }
29522936
;
29532937

2954-
opt_with: WITH definition { $$ = $2; }
2938+
opt_definition: WITH definition { $$ = $2; }
29552939
| /*EMPTY*/ { $$ = NIL; }
29562940
;
29572941

@@ -3118,7 +3102,7 @@ RuleStmt: CREATE RULE name AS
31183102

31193103
RuleActionList: NOTHING { $$ = NIL; }
31203104
| RuleActionStmt { $$ = makeList1($1); }
3121-
| '(' RuleActionMulti ')' { $$ = $2; }
3105+
| '(' RuleActionMulti ')' { $$ = $2; }
31223106
;
31233107

31243108
/* the thrashing around here is to discard "empty" statements... */
@@ -3324,7 +3308,7 @@ LoadStmt: LOAD file_name
33243308
*
33253309
*****************************************************************************/
33263310

3327-
CreatedbStmt: CREATE DATABASE database_name WITH createdb_opt_list
3311+
CreatedbStmt: CREATE DATABASE database_name opt_with createdb_opt_list
33283312
{
33293313
CreatedbStmt *n = makeNode(CreatedbStmt);
33303314
List *l;
@@ -3425,7 +3409,7 @@ createdb_opt_item: LOCATION opt_equal Sconst
34253409
{
34263410
$$ = lconsi(3, makeListi1(-1));
34273411
}
3428-
| OWNER opt_equal name
3412+
| OWNER opt_equal name
34293413
{
34303414
$$ = lconsi(4, makeList1($3));
34313415
}
@@ -3437,7 +3421,8 @@ createdb_opt_item: LOCATION opt_equal Sconst
34373421

34383422
/*
34393423
* Though the equals sign doesn't match other WITH options, pg_dump uses
3440-
* equals for backward compability, and it doesn't seem worth remove it.
3424+
* equals for backward compability, and it doesn't seem worth removing it.
3425+
* 2002-02-25
34413426
*/
34423427
opt_equal: '=' { $$ = TRUE; }
34433428
| /*EMPTY*/ { $$ = FALSE; }
@@ -3496,7 +3481,7 @@ CreateDomainStmt: CREATE DOMAIN_P any_name opt_as Typename ColQualList opt_coll
34963481
n->domainname = $3;
34973482
n->typename = $5;
34983483
n->constraints = $6;
3499-
3484+
35003485
if ($7 != NULL)
35013486
elog(NOTICE,"CREATE DOMAIN / COLLATE %s not yet "
35023487
"implemented; clause ignored", $7);
@@ -3940,7 +3925,7 @@ simple_select: SELECT opt_distinct target_list
39403925
$$ = (Node *)n;
39413926
}
39423927
| select_clause UNION opt_all select_clause
3943-
{
3928+
{
39443929
$$ = makeSetOp(SETOP_UNION, $3, $1, $4);
39453930
}
39463931
| select_clause INTERSECT opt_all select_clause
@@ -3951,7 +3936,7 @@ simple_select: SELECT opt_distinct target_list
39513936
{
39523937
$$ = makeSetOp(SETOP_EXCEPT, $3, $1, $4);
39533938
}
3954-
;
3939+
;
39553940

39563941
into_clause: INTO OptTempTableName { $$ = $2; }
39573942
| /*EMPTY*/ { $$ = NULL; }
@@ -3962,22 +3947,22 @@ into_clause: INTO OptTempTableName { $$ = $2; }
39623947
* since TEMP is not a reserved word. See also OptTemp.
39633948
*/
39643949
OptTempTableName: TEMPORARY opt_table qualified_name
3965-
{
3950+
{
39663951
$$ = $3;
39673952
$$->istemp = true;
39683953
}
39693954
| TEMP opt_table qualified_name
3970-
{
3955+
{
39713956
$$ = $3;
39723957
$$->istemp = true;
39733958
}
39743959
| LOCAL TEMPORARY opt_table qualified_name
3975-
{
3960+
{
39763961
$$ = $4;
39773962
$$->istemp = true;
39783963
}
39793964
| LOCAL TEMP opt_table qualified_name
3980-
{
3965+
{
39813966
$$ = $4;
39823967
$$->istemp = true;
39833968
}
@@ -3994,12 +3979,12 @@ OptTempTableName: TEMPORARY opt_table qualified_name
39943979
$$->istemp = true;
39953980
}
39963981
| TABLE qualified_name
3997-
{
3982+
{
39983983
$$ = $2;
39993984
$$->istemp = false;
40003985
}
40013986
| qualified_name
4002-
{
3987+
{
40033988
$$ = $1;
40043989
$$->istemp = false;
40053990
}
@@ -6122,7 +6107,7 @@ insert_target_list: insert_target_list ',' insert_target_el
61226107
;
61236108

61246109
insert_target_el: target_el { $$ = $1; }
6125-
| DEFAULT {
6110+
| DEFAULT {
61266111
InsertDefault *def = makeNode(InsertDefault);
61276112
$$ = makeNode(ResTarget);
61286113
$$->name = NULL;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy