diff options
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/gram.y | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index b20f92ba7b2..4600a29c2c5 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.456 2004/05/26 13:56:51 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.457 2004/05/26 15:07:37 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -310,7 +310,7 @@ static void doNegateFloat(Value *v); %type <str> Sconst comment_text %type <str> UserId opt_boolean ColId_or_Sconst %type <list> var_list var_list_or_default -%type <str> ColId ColLabel type_name param_name +%type <str> ColId ColLabel var_name type_name param_name %type <node> var_value zone_value %type <keyword> unreserved_keyword func_name_keyword @@ -859,14 +859,14 @@ VariableSetStmt: } ; -set_rest: ColId TO var_list_or_default +set_rest: var_name TO var_list_or_default { VariableSetStmt *n = makeNode(VariableSetStmt); n->name = $1; n->args = $3; $$ = n; } - | ColId '=' var_list_or_default + | var_name '=' var_list_or_default { VariableSetStmt *n = makeNode(VariableSetStmt); n->name = $1; @@ -919,6 +919,19 @@ set_rest: ColId TO var_list_or_default } ; +var_name: + ColId { $$ = $1; } + | var_name '.' ColId + { + int qLen = strlen($1); + char* qualName = palloc(qLen + strlen($3) + 2); + strcpy(qualName, $1); + qualName[qLen] = '.'; + strcpy(qualName + qLen + 1, $3); + $$ = qualName; + } + ; + var_list_or_default: var_list { $$ = $1; } | DEFAULT { $$ = NIL; } |