@ -450,9 +450,10 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%type <ival> Iconst SignedIconst
%type <str> Sconst comment_text notify_payload
%type <str> RoleId opt_granted_by opt_boolean_or_string ColId_or_Sconst
%type <str> RoleId opt_granted_by opt_boolean_or_string
%type <list> var_list
%type <str> ColId ColLabel var_name type_function_name param_name
%type <str> NonReservedWord NonReservedWord_or_Sconst
%type <node> var_value zone_value
%type <keyword> unreserved_keyword type_func_name_keyword
@ -1402,7 +1403,7 @@ set_rest_more: /* Generic SET syntaxes: */
n->kind = VAR_SET_DEFAULT;
$$ = n;
}
| ROLE ColI d_or_Sconst
| ROLE NonReservedWor d_or_Sconst
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->kind = VAR_SET_VALUE;
@ -1410,7 +1411,7 @@ set_rest_more: /* Generic SET syntaxes: */
n->args = list_make1(makeStringConst($2, @2));
$$ = n;
}
| SESSION AUTHORIZATION ColI d_or_Sconst
| SESSION AUTHORIZATION NonReservedWor d_or_Sconst
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->kind = VAR_SET_VALUE;
@ -1473,11 +1474,11 @@ opt_boolean_or_string:
| FALSE_P { $$ = "false"; }
| ON { $$ = "on"; }
/*
* OFF is also accepted as a boolean value, but is handled
* by the ColId rule below. The action for booleans and strings
* OFF is also accepted as a boolean value, but is handled by
* the NonReservedWord rule. The action for booleans and strings
* is the same, so we don't need to distinguish them here.
*/
| ColId_or_Sconst { $$ = $1; }
| NonReservedWord_or_Sconst { $$ = $1; }
;
/* Timezone values can be:
@ -1546,8 +1547,8 @@ opt_encoding:
| /*EMPTY*/ { $$ = NULL; }
;
ColI d_or_Sconst:
ColId { $$ = $1; }
NonReservedWor d_or_Sconst:
NonReservedWord { $$ = $1; }
| Sconst { $$ = $1; }
;
@ -3418,7 +3419,7 @@ NumericOnly_list: NumericOnly { $$ = list_make1($1); }
*****************************************************************************/
CreatePLangStmt:
CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE ColI d_or_Sconst
CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE NonReservedWor d_or_Sconst
{
CreatePLangStmt *n = makeNode(CreatePLangStmt);
n->replace = $2;
@ -3430,7 +3431,7 @@ CreatePLangStmt:
n->pltrusted = false;
$$ = (Node *)n;
}
| CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE ColI d_or_Sconst
| CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE NonReservedWor d_or_Sconst
HANDLER handler_name opt_inline_handler opt_validator
{
CreatePLangStmt *n = makeNode(CreatePLangStmt);
@ -3474,7 +3475,7 @@ opt_validator:
;
DropPLangStmt:
DROP opt_procedural LANGUAGE ColI d_or_Sconst opt_drop_behavior
DROP opt_procedural LANGUAGE NonReservedWor d_or_Sconst opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_LANGUAGE;
@ -3485,7 +3486,7 @@ DropPLangStmt:
n->concurrent = false;
$$ = (Node *)n;
}
| DROP opt_procedural LANGUAGE IF_P EXISTS ColI d_or_Sconst opt_drop_behavior
| DROP opt_procedural LANGUAGE IF_P EXISTS NonReservedWor d_or_Sconst opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_LANGUAGE;
@ -3587,11 +3588,11 @@ create_extension_opt_item:
{
$$ = makeDefElem("schema", (Node *)makeString($2));
}
| VERSION_P ColI d_or_Sconst
| VERSION_P NonReservedWor d_or_Sconst
{
$$ = makeDefElem("new_version", (Node *)makeString($2));
}
| FROM ColI d_or_Sconst
| FROM NonReservedWor d_or_Sconst
{
$$ = makeDefElem("old_version", (Node *)makeString($2));
}
@ -3620,7 +3621,7 @@ alter_extension_opt_list:
;
alter_extension_opt_item:
TO ColI d_or_Sconst
TO NonReservedWor d_or_Sconst
{
$$ = makeDefElem("new_version", (Node *)makeString($2));
}
@ -5428,8 +5429,8 @@ SecLabelStmt:
}
;
opt_provider: FOR ColI d_or_Sconst { $$ = $2; }
| /* empty */ { $$ = NULL; }
opt_provider: FOR NonReservedWor d_or_Sconst { $$ = $2; }
| /* empty */ { $$ = NULL; }
;
security_label_type:
@ -6455,7 +6456,7 @@ createfunc_opt_item:
{
$$ = makeDefElem("as", (Node *)$2);
}
| LANGUAGE ColI d_or_Sconst
| LANGUAGE NonReservedWor d_or_Sconst
{
$$ = makeDefElem("language", (Node *)makeString($2));
}
@ -6670,7 +6671,7 @@ dostmt_opt_item:
{
$$ = makeDefElem("as", (Node *)makeString($1));
}
| LANGUAGE ColI d_or_Sconst
| LANGUAGE NonReservedWor d_or_Sconst
{
$$ = makeDefElem("language", (Node *)makeString($2));
}
@ -8667,9 +8668,7 @@ explain_option_elem:
;
explain_option_name:
ColId { $$ = $1; }
| analyze_keyword { $$ = "analyze"; }
| VERBOSE { $$ = "verbose"; }
NonReservedWord { $$ = $1; }
;
explain_option_arg:
@ -12580,7 +12579,7 @@ AexprConst: Iconst
Iconst: ICONST { $$ = $1; };
Sconst: SCONST { $$ = $1; };
RoleId: ColId { $$ = $1; };
RoleId: NonReservedWord { $$ = $1; };
SignedIconst: Iconst { $$ = $1; }
| '+' Iconst { $$ = + $2; }
@ -12612,6 +12611,14 @@ type_function_name: IDENT { $$ = $1; }
| type_func_name_keyword { $$ = pstrdup($1); }
;
/* Any not-fully-reserved word --- these names can be, eg, role names.
*/
NonReservedWord: IDENT { $$ = $1; }
| unreserved_keyword { $$ = pstrdup($1); }
| col_name_keyword { $$ = pstrdup($1); }
| type_func_name_keyword { $$ = pstrdup($1); }
;
/* Column label --- allowed labels in "AS" clauses.
* This presently includes *all* Postgres keywords.
*/