@@ -489,8 +489,8 @@ static void SplitColQualList(List *qualList,
489
489
CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
490
490
CLUSTER COALESCE COLLATE COLLATION COLUMN COMMENT COMMENTS COMMIT
491
491
COMMITTED CONCURRENTLY CONFIGURATION CONNECTION CONSTRAINT CONSTRAINTS
492
- CONTENT_P CONTINUE_P CONVERSION_P COPY COST CREATE CREATEDB
493
- CREATEROLE CREATEUSER CROSS CSV CURRENT_P
492
+ CONTENT_P CONTINUE_P CONVERSION_P COPY COST CREATE
493
+ CROSS CSV CURRENT_P
494
494
CURRENT_CATALOG CURRENT_DATE CURRENT_ROLE CURRENT_SCHEMA
495
495
CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
496
496
@@ -520,13 +520,12 @@ static void SplitColQualList(List *qualList,
520
520
521
521
LABEL LANGUAGE LARGE_P LAST_P LC_COLLATE_P LC_CTYPE_P LEADING
522
522
LEAST LEFT LEVEL LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP
523
- LOCATION LOCK_P LOGIN_P
523
+ LOCATION LOCK_P
524
524
525
525
MAPPING MATCH MAXVALUE MINUTE_P MINVALUE MODE MONTH_P MOVE
526
526
527
- NAME_P NAMES NATIONAL NATURAL NCHAR NEXT NO NOCREATEDB
528
- NOCREATEROLE NOCREATEUSER NOINHERIT NOLOGIN_P NONE NOREPLICATION_P
529
- NOSUPERUSER NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF
527
+ NAME_P NAMES NATIONAL NATURAL NCHAR NEXT NO NONE
528
+ NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF
530
529
NULLS_P NUMERIC
531
530
532
531
OBJECT_P OF OFF OFFSET OIDS ON ONLY OPERATOR OPTION OPTIONS OR
@@ -539,14 +538,14 @@ static void SplitColQualList(List *qualList,
539
538
QUOTE
540
539
541
540
RANGE READ REAL REASSIGN RECHECK RECURSIVE REF REFERENCES REINDEX
542
- RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA REPLICATION_P
541
+ RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA
543
542
RESET RESTART RESTRICT RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK
544
543
ROW ROWS RULE
545
544
546
545
SAVEPOINT SCHEMA SCROLL SEARCH SECOND_P SECURITY SELECT SEQUENCE SEQUENCES
547
546
SERIALIZABLE SERVER SESSION SESSION_USER SET SETOF SHARE
548
547
SHOW SIMILAR SIMPLE SMALLINT SOME STABLE STANDALONE_P START STATEMENT
549
- STATISTICS STDIN STDOUT STORAGE STRICT_P STRIP_P SUBSTRING SUPERUSER_P
548
+ STATISTICS STDIN STDOUT STORAGE STRICT_P STRIP_P SUBSTRING
550
549
SYMMETRIC SYSID SYSTEM_P
551
550
552
551
TABLE TABLES TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN TIME TIMESTAMP
@@ -838,63 +837,10 @@ AlterOptRoleElem:
838
837
$$ = makeDefElem(" unencryptedPassword" ,
839
838
(Node *)makeString($3 ));
840
839
}
841
- | SUPERUSER_P
842
- {
843
- $$ = makeDefElem(" superuser" , (Node *)makeInteger(TRUE ));
844
- }
845
- | NOSUPERUSER
846
- {
847
- $$ = makeDefElem(" superuser" , (Node *)makeInteger(FALSE ));
848
- }
849
840
| INHERIT
850
841
{
851
842
$$ = makeDefElem(" inherit" , (Node *)makeInteger(TRUE ));
852
843
}
853
- | NOINHERIT
854
- {
855
- $$ = makeDefElem(" inherit" , (Node *)makeInteger(FALSE ));
856
- }
857
- | CREATEDB
858
- {
859
- $$ = makeDefElem(" createdb" , (Node *)makeInteger(TRUE ));
860
- }
861
- | NOCREATEDB
862
- {
863
- $$ = makeDefElem(" createdb" , (Node *)makeInteger(FALSE ));
864
- }
865
- | CREATEROLE
866
- {
867
- $$ = makeDefElem(" createrole" , (Node *)makeInteger(TRUE ));
868
- }
869
- | NOCREATEROLE
870
- {
871
- $$ = makeDefElem(" createrole" , (Node *)makeInteger(FALSE ));
872
- }
873
- | CREATEUSER
874
- {
875
- /* For backwards compatibility, synonym for SUPERUSER */
876
- $$ = makeDefElem(" superuser" , (Node *)makeInteger(TRUE ));
877
- }
878
- | NOCREATEUSER
879
- {
880
- $$ = makeDefElem(" superuser" , (Node *)makeInteger(FALSE ));
881
- }
882
- | LOGIN_P
883
- {
884
- $$ = makeDefElem(" canlogin" , (Node *)makeInteger(TRUE ));
885
- }
886
- | NOLOGIN_P
887
- {
888
- $$ = makeDefElem(" canlogin" , (Node *)makeInteger(FALSE ));
889
- }
890
- | REPLICATION_P
891
- {
892
- $$ = makeDefElem(" isreplication" , (Node *)makeInteger(TRUE ));
893
- }
894
- | NOREPLICATION_P
895
- {
896
- $$ = makeDefElem(" isreplication" , (Node *)makeInteger(FALSE ));
897
- }
898
844
| CONNECTION LIMIT SignedIconst
899
845
{
900
846
$$ = makeDefElem(" connectionlimit" , (Node *)makeInteger($3 ));
@@ -908,6 +854,57 @@ AlterOptRoleElem:
908
854
{
909
855
$$ = makeDefElem(" rolemembers" , (Node *)$2 );
910
856
}
857
+ | IDENT
858
+ {
859
+ /*
860
+ * We handle identifiers that aren't parser keywords with
861
+ * the following special-case codes, to avoid bloating the
862
+ * size of the main parser.
863
+ */
864
+ if (strcmp($1 , " superuser" ) == 0 )
865
+ $$ = makeDefElem(" superuser" , (Node *)makeInteger(TRUE ));
866
+ else if (strcmp($1 , " nosuperuser" ) == 0 )
867
+ $$ = makeDefElem(" superuser" , (Node *)makeInteger(FALSE ));
868
+ else if (strcmp($1 , " createuser" ) == 0 )
869
+ {
870
+ /* For backwards compatibility, synonym for SUPERUSER */
871
+ $$ = makeDefElem(" superuser" , (Node *)makeInteger(TRUE ));
872
+ }
873
+ else if (strcmp($1 , " nocreateuser" ) == 0 )
874
+ {
875
+ /* For backwards compatibility, synonym for SUPERUSER */
876
+ $$ = makeDefElem(" superuser" , (Node *)makeInteger(FALSE ));
877
+ }
878
+ else if (strcmp($1 , " createrole" ) == 0 )
879
+ $$ = makeDefElem(" createrole" , (Node *)makeInteger(TRUE ));
880
+ else if (strcmp($1 , " nocreaterole" ) == 0 )
881
+ $$ = makeDefElem(" createrole" , (Node *)makeInteger(FALSE ));
882
+ else if (strcmp($1 , " replication" ) == 0 )
883
+ $$ = makeDefElem(" isreplication" , (Node *)makeInteger(TRUE ));
884
+ else if (strcmp($1 , " noreplication" ) == 0 )
885
+ $$ = makeDefElem(" isreplication" , (Node *)makeInteger(FALSE ));
886
+ else if (strcmp($1 , " createdb" ) == 0 )
887
+ $$ = makeDefElem(" createdb" , (Node *)makeInteger(TRUE ));
888
+ else if (strcmp($1 , " nocreatedb" ) == 0 )
889
+ $$ = makeDefElem(" createdb" , (Node *)makeInteger(FALSE ));
890
+ else if (strcmp($1 , " login" ) == 0 )
891
+ $$ = makeDefElem(" canlogin" , (Node *)makeInteger(TRUE ));
892
+ else if (strcmp($1 , " nologin" ) == 0 )
893
+ $$ = makeDefElem(" canlogin" , (Node *)makeInteger(FALSE ));
894
+ else if (strcmp($1 , " noinherit" ) == 0 )
895
+ {
896
+ /*
897
+ * Note that INHERIT is a keyword, so it's handled by main parser, but
898
+ * NOINHERIT is handled here.
899
+ */
900
+ $$ = makeDefElem(" inherit" , (Node *)makeInteger(FALSE ));
901
+ }
902
+ else
903
+ ereport (ERROR,
904
+ (errcode(ERRCODE_SYNTAX_ERROR),
905
+ errmsg(" unrecognized role option \" %s\" " , $1 ),
906
+ parser_errposition(@1 )));
907
+ }
911
908
;
912
909
913
910
CreateOptRoleElem :
@@ -11853,9 +11850,6 @@ unreserved_keyword:
11853
11850
| CONVERSION_P
11854
11851
| COPY
11855
11852
| COST
11856
- | CREATEDB
11857
- | CREATEROLE
11858
- | CREATEUSER
11859
11853
| CSV
11860
11854
| CURRENT_P
11861
11855
| CURSOR
@@ -11935,7 +11929,6 @@ unreserved_keyword:
11935
11929
| LOCAL
11936
11930
| LOCATION
11937
11931
| LOCK_P
11938
- | LOGIN_P
11939
11932
| MAPPING
11940
11933
| MATCH
11941
11934
| MAXVALUE
@@ -11948,13 +11941,6 @@ unreserved_keyword:
11948
11941
| NAMES
11949
11942
| NEXT
11950
11943
| NO
11951
- | NOCREATEDB
11952
- | NOCREATEROLE
11953
- | NOCREATEUSER
11954
- | NOINHERIT
11955
- | NOLOGIN_P
11956
- | NOREPLICATION_P
11957
- | NOSUPERUSER
11958
11944
| NOTHING
11959
11945
| NOTIFY
11960
11946
| NOWAIT
@@ -11996,7 +11982,6 @@ unreserved_keyword:
11996
11982
| REPEATABLE
11997
11983
| REPLACE
11998
11984
| REPLICA
11999
- | REPLICATION_P
12000
11985
| RESET
12001
11986
| RESTART
12002
11987
| RESTRICT
@@ -12031,7 +12016,6 @@ unreserved_keyword:
12031
12016
| STORAGE
12032
12017
| STRICT_P
12033
12018
| STRIP_P
12034
- | SUPERUSER_P
12035
12019
| SYSID
12036
12020
| SYSTEM_P
12037
12021
| TABLES
0 commit comments