From 59121409de746f1907a9dcd0804ee500de6e19b4 Mon Sep 17 00:00:00 2001 From: Alexey Kondratov Date: Wed, 2 Sep 2020 23:05:16 +0300 Subject: [PATCH v28 1/6] Refactor gram.y in order to add a common parenthesized option list Previously there were two identical option lists (explain_option_list and vac_analyze_option_list) + very similar reindex_option_list. It does not seem to make sense to maintain identical option lists in the grammar, since all new options are added and parsed in the backend code. That way, new common_option_list added in order to replace all explain_option_list, vac_analyze_option_list and probably also reindex_option_list. --- src/backend/parser/gram.y | 61 +++++++++------------------------------ 1 file changed, 14 insertions(+), 47 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 17653ef3a7..c70d06b0e3 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -315,10 +315,10 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); create_extension_opt_item alter_extension_opt_item %type opt_lock lock_type cast_context -%type vac_analyze_option_name -%type vac_analyze_option_elem -%type vac_analyze_option_list -%type vac_analyze_option_arg +%type common_option_name +%type common_option_elem +%type common_option_list +%type common_option_arg %type drop_option %type opt_or_replace opt_no opt_grant_grant_option opt_grant_admin_option @@ -513,10 +513,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type generic_option_arg %type generic_option_elem alter_generic_option_elem %type generic_option_list alter_generic_option_list -%type explain_option_name -%type explain_option_arg -%type explain_option_elem -%type explain_option_list %type reindex_target_type reindex_target_multitable %type reindex_option_list reindex_option_elem @@ -10454,7 +10450,7 @@ VacuumStmt: VACUUM opt_full opt_freeze opt_verbose opt_analyze opt_vacuum_relati n->is_vacuumcmd = true; $$ = (Node *)n; } - | VACUUM '(' vac_analyze_option_list ')' opt_vacuum_relation_list + | VACUUM '(' common_option_list ')' opt_vacuum_relation_list { VacuumStmt *n = makeNode(VacuumStmt); n->options = $3; @@ -10475,7 +10471,7 @@ AnalyzeStmt: analyze_keyword opt_verbose opt_vacuum_relation_list n->is_vacuumcmd = false; $$ = (Node *)n; } - | analyze_keyword '(' vac_analyze_option_list ')' opt_vacuum_relation_list + | analyze_keyword '(' common_option_list ')' opt_vacuum_relation_list { VacuumStmt *n = makeNode(VacuumStmt); n->options = $3; @@ -10485,12 +10481,12 @@ AnalyzeStmt: analyze_keyword opt_verbose opt_vacuum_relation_list } ; -vac_analyze_option_list: - vac_analyze_option_elem +common_option_list: + common_option_elem { $$ = list_make1($1); } - | vac_analyze_option_list ',' vac_analyze_option_elem + | common_option_list ',' common_option_elem { $$ = lappend($1, $3); } @@ -10501,19 +10497,19 @@ analyze_keyword: | ANALYSE /* British */ {} ; -vac_analyze_option_elem: - vac_analyze_option_name vac_analyze_option_arg +common_option_elem: + common_option_name common_option_arg { $$ = makeDefElem($1, $2, @1); } ; -vac_analyze_option_name: +common_option_name: NonReservedWord { $$ = $1; } | analyze_keyword { $$ = "analyze"; } ; -vac_analyze_option_arg: +common_option_arg: opt_boolean_or_string { $$ = (Node *) makeString($1); } | NumericOnly { $$ = (Node *) $1; } | /* EMPTY */ { $$ = NULL; } @@ -10595,7 +10591,7 @@ ExplainStmt: n->options = list_make1(makeDefElem("verbose", NULL, @2)); $$ = (Node *) n; } - | EXPLAIN '(' explain_option_list ')' ExplainableStmt + | EXPLAIN '(' common_option_list ')' ExplainableStmt { ExplainStmt *n = makeNode(ExplainStmt); n->query = $5; @@ -10616,35 +10612,6 @@ ExplainableStmt: | ExecuteStmt /* by default all are $$=$1 */ ; -explain_option_list: - explain_option_elem - { - $$ = list_make1($1); - } - | explain_option_list ',' explain_option_elem - { - $$ = lappend($1, $3); - } - ; - -explain_option_elem: - explain_option_name explain_option_arg - { - $$ = makeDefElem($1, $2, @1); - } - ; - -explain_option_name: - NonReservedWord { $$ = $1; } - | analyze_keyword { $$ = "analyze"; } - ; - -explain_option_arg: - opt_boolean_or_string { $$ = (Node *) makeString($1); } - | NumericOnly { $$ = (Node *) $1; } - | /* EMPTY */ { $$ = NULL; } - ; - /***************************************************************************** * * QUERY: base-commit: 733fa9aa51c526582f100aa0d375e0eb9a6bce8b -- 2.19.1