@@ -489,8 +489,8 @@ static void SplitColQualList(List *qualList,
489489CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
490490CLUSTER COALESCE COLLATE COLLATION COLUMN COMMENT COMMENTS COMMIT
491491COMMITTED 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
494494CURRENT_CATALOG CURRENT_DATE CURRENT_ROLE CURRENT_SCHEMA
495495CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
496496
@@ -520,13 +520,12 @@ static void SplitColQualList(List *qualList,
520520
521521LABEL LANGUAGE LARGE_P LAST_P LC_COLLATE_P LC_CTYPE_P LEADING
522522LEAST LEFT LEVEL LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP
523- LOCATION LOCK_P LOGIN_P
523+ LOCATION LOCK_P
524524
525525MAPPING MATCH MAXVALUE MINUTE_P MINVALUE MODE MONTH_P MOVE
526526
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
530529NULLS_P NUMERIC
531530
532531OBJECT_P OF OFF OFFSET OIDS ON ONLY OPERATOR OPTION OPTIONS OR
@@ -539,14 +538,14 @@ static void SplitColQualList(List *qualList,
539538QUOTE
540539
541540RANGE 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
543542RESET RESTART RESTRICT RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK
544543ROW ROWS RULE
545544
546545SAVEPOINT SCHEMA SCROLL SEARCH SECOND_P SECURITY SELECT SEQUENCE SEQUENCES
547546SERIALIZABLE SERVER SESSION SESSION_USER SET SETOF SHARE
548547SHOW 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
550549SYMMETRIC SYSID SYSTEM_P
551550
552551TABLE TABLES TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN TIME TIMESTAMP
@@ -838,63 +837,10 @@ AlterOptRoleElem:
838837$$ = makeDefElem(" unencryptedPassword" ,
839838 (Node *)makeString($3 ));
840839}
841- | SUPERUSER_P
842- {
843- $$ = makeDefElem(" superuser" , (Node *)makeInteger(TRUE ));
844- }
845- | NOSUPERUSER
846- {
847- $$ = makeDefElem(" superuser" , (Node *)makeInteger(FALSE ));
848- }
849840| INHERIT
850841{
851842$$ = makeDefElem(" inherit" , (Node *)makeInteger(TRUE ));
852843}
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- }
898844| CONNECTION LIMIT SignedIconst
899845{
900846$$ = makeDefElem(" connectionlimit" , (Node *)makeInteger($3 ));
@@ -908,6 +854,57 @@ AlterOptRoleElem:
908854{
909855$$ = makeDefElem(" rolemembers" , (Node *)$2 );
910856}
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+ }
911908;
912909
913910CreateOptRoleElem :
@@ -11853,9 +11850,6 @@ unreserved_keyword:
1185311850| CONVERSION_P
1185411851| COPY
1185511852| COST
11856- | CREATEDB
11857- | CREATEROLE
11858- | CREATEUSER
1185911853| CSV
1186011854| CURRENT_P
1186111855| CURSOR
@@ -11935,7 +11929,6 @@ unreserved_keyword:
1193511929| LOCAL
1193611930| LOCATION
1193711931| LOCK_P
11938- | LOGIN_P
1193911932| MAPPING
1194011933| MATCH
1194111934| MAXVALUE
@@ -11948,13 +11941,6 @@ unreserved_keyword:
1194811941| NAMES
1194911942| NEXT
1195011943| NO
11951- | NOCREATEDB
11952- | NOCREATEROLE
11953- | NOCREATEUSER
11954- | NOINHERIT
11955- | NOLOGIN_P
11956- | NOREPLICATION_P
11957- | NOSUPERUSER
1195811944| NOTHING
1195911945| NOTIFY
1196011946| NOWAIT
@@ -11996,7 +11982,6 @@ unreserved_keyword:
1199611982| REPEATABLE
1199711983| REPLACE
1199811984| REPLICA
11999- | REPLICATION_P
1200011985| RESET
1200111986| RESTART
1200211987| RESTRICT
@@ -12031,7 +12016,6 @@ unreserved_keyword:
1203112016| STORAGE
1203212017| STRICT_P
1203312018| STRIP_P
12034- | SUPERUSER_P
1203512019| SYSID
1203612020| SYSTEM_P
1203712021| TABLES