From 0fdc0f660b1f57c82f7dc99e33f0a42949b91f50 Mon Sep 17 00:00:00 2001 From: Daniel Gustafsson Date: Wed, 29 Mar 2017 16:38:50 +0200 Subject: [PATCH] Prohibit multiple TO in ALTER EXTENSION UPDATE in parser Since ALTER EXTENSION .. UPDATE TO x TO y; is a syntax error, disallow from this already in the parser rather than deferring to the command processing. --- src/backend/commands/extension.c | 7 ------- src/backend/parser/gram.y | 14 +++++--------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index 5a84bed..6e3410a 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -2935,14 +2935,7 @@ ExecAlterExtensionStmt(ParseState *pstate, AlterExtensionStmt *stmt) DefElem *defel = (DefElem *) lfirst(lc); if (strcmp(defel->defname, "new_version") == 0) - { - if (d_new_version) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("conflicting or redundant options"), - parser_errposition(pstate, defel->location))); d_new_version = defel; - } else elog(ERROR, "unrecognized option: %s", defel->defname); } diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 9d53a29..77bf99b 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -300,7 +300,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); create_extension_opt_list alter_extension_opt_list %type createdb_opt_item copy_opt_item transaction_mode_item - create_extension_opt_item alter_extension_opt_item + create_extension_opt_item %type opt_lock lock_type cast_context %type vacuum_option_list vacuum_option_elem @@ -4251,17 +4251,13 @@ AlterExtensionStmt: ALTER EXTENSION name UPDATE alter_extension_opt_list ; alter_extension_opt_list: - alter_extension_opt_list alter_extension_opt_item - { $$ = lappend($1, $2); } - | /* EMPTY */ - { $$ = NIL; } - ; - -alter_extension_opt_item: TO NonReservedWord_or_Sconst { - $$ = makeDefElem("new_version", (Node *)makeString($2), @1); + $$ = list_make1(makeDefElem("new_version", + (Node *) makeString($2), @1)); } + | /* EMPTY */ + { $$ = NIL; } ; /***************************************************************************** -- 2.6.4 (Apple Git-63)