diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2022-07-22 19:23:39 +0200 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2022-07-22 19:23:39 +0200 |
commit | 83011ce7d7f42b744a93d2b0819597d0aa94e9cc (patch) | |
tree | c12cf093064b723cc538d5fef052342330f4d258 /src | |
parent | 0b292bed9211e5c85b7b102690f526c3a6600c2e (diff) | |
download | postgresql-83011ce7d7f42b744a93d2b0819597d0aa94e9cc.tar.gz postgresql-83011ce7d7f42b744a93d2b0819597d0aa94e9cc.zip |
Rework grammar for REINDEX
The part of grammar have grown needlessly duplicative and more complex
that necessary. Rewrite.
Reviewed-by: Michaƫl Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/20220721174212.cmitjpuimx6ssyyj@alvherre.pgsql
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/parser/gram.y | 85 | ||||
-rw-r--r-- | src/test/regress/expected/create_index.out | 6 | ||||
-rw-r--r-- | src/test/regress/sql/create_index.sql | 2 |
3 files changed, 36 insertions, 57 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index b761a5b5d2d..ace4fb5c778 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -336,7 +336,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type <str> opt_single_name %type <list> opt_qualified_name -%type <boolean> opt_concurrently +%type <boolean> opt_concurrently %type <dbehavior> opt_drop_behavior %type <node> alter_column_default opclass_item opclass_drop alter_using @@ -564,7 +564,8 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type <defelt> generic_option_elem alter_generic_option_elem %type <list> generic_option_list alter_generic_option_list -%type <ival> reindex_target_type reindex_target_multitable reindex_name_optional +%type <ival> reindex_target_type +%type <list> opt_reindex_option_list %type <node> copy_generic_opt_arg copy_generic_opt_arg_list_item %type <defelt> copy_generic_opt_elem @@ -9091,78 +9092,54 @@ DropTransformStmt: DROP TRANSFORM opt_if_exists FOR Typename LANGUAGE name opt_d * * QUERY: * - * REINDEX [ (options) ] type [CONCURRENTLY] <name> + * REINDEX [ (options) ] {TABLE | INDEX | SCHEMA} [CONCURRENTLY] <name> + * REINDEX [ (options) ] DATABASE [CONCURRENTLY] [<name>] + * REINDEX [ (options) ] SYSTEM [<name>] *****************************************************************************/ ReindexStmt: - REINDEX reindex_target_type opt_concurrently qualified_name + REINDEX opt_reindex_option_list reindex_target_type opt_concurrently qualified_name { ReindexStmt *n = makeNode(ReindexStmt); - n->kind = $2; - n->relation = $4; + n->kind = $3; + n->relation = $5; n->name = NULL; - n->params = NIL; - if ($3) + n->params = $2; + if ($4) n->params = lappend(n->params, - makeDefElem("concurrently", NULL, @3)); + makeDefElem("concurrently", NULL, @4)); $$ = (Node *) n; } - | REINDEX reindex_target_multitable opt_concurrently name + | REINDEX opt_reindex_option_list SCHEMA opt_concurrently name { ReindexStmt *n = makeNode(ReindexStmt); - n->kind = $2; - n->name = $4; + n->kind = REINDEX_OBJECT_SCHEMA; + n->name = $5; n->relation = NULL; - n->params = NIL; - if ($3) + n->params = $2; + if ($4) n->params = lappend(n->params, - makeDefElem("concurrently", NULL, @3)); + makeDefElem("concurrently", NULL, @4)); $$ = (Node *) n; } - | REINDEX reindex_name_optional - { - ReindexStmt *n = makeNode(ReindexStmt); - n->kind = $2; - n->name = NULL; - n->relation = NULL; - n->params = NIL; - $$ = (Node *)n; - } - | REINDEX '(' utility_option_list ')' reindex_name_optional + | REINDEX opt_reindex_option_list DATABASE opt_concurrently opt_single_name { ReindexStmt *n = makeNode(ReindexStmt); - n->kind = $5; + n->kind = REINDEX_OBJECT_DATABASE; n->name = NULL; n->relation = NULL; - n->params = $3; - $$ = (Node *)n; - } - | REINDEX '(' utility_option_list ')' reindex_target_type opt_concurrently qualified_name - { - ReindexStmt *n = makeNode(ReindexStmt); - - n->kind = $5; - n->relation = $7; - n->name = NULL; - n->params = $3; - if ($6) - n->params = lappend(n->params, - makeDefElem("concurrently", NULL, @6)); + n->params = $2; $$ = (Node *) n; } - | REINDEX '(' utility_option_list ')' reindex_target_multitable opt_concurrently name + | REINDEX opt_reindex_option_list SYSTEM_P opt_single_name { ReindexStmt *n = makeNode(ReindexStmt); - - n->kind = $5; - n->name = $7; + n->kind = REINDEX_OBJECT_SYSTEM; + n->name = NULL; n->relation = NULL; - n->params = $3; - if ($6) - n->params = lappend(n->params, - makeDefElem("concurrently", NULL, @6)); + n->params = $2; $$ = (Node *) n; } ; @@ -9170,15 +9147,9 @@ reindex_target_type: INDEX { $$ = REINDEX_OBJECT_INDEX; } | TABLE { $$ = REINDEX_OBJECT_TABLE; } ; -reindex_target_multitable: - SCHEMA { $$ = REINDEX_OBJECT_SCHEMA; } - | SYSTEM_P { $$ = REINDEX_OBJECT_SYSTEM; } - | DATABASE { $$ = REINDEX_OBJECT_DATABASE; } - ; -/* For these options the name is optional */ -reindex_name_optional: - SYSTEM_P { $$ = REINDEX_OBJECT_SYSTEM; } - | DATABASE { $$ = REINDEX_OBJECT_DATABASE; } +opt_reindex_option_list: + '(' utility_option_list ')' { $$ = $2; } + | /* EMPTY */ { $$ = NULL; } ; /***************************************************************************** diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out index d55aec3a1d0..a913a1846f9 100644 --- a/src/test/regress/expected/create_index.out +++ b/src/test/regress/expected/create_index.out @@ -2521,6 +2521,12 @@ ERROR: cannot reindex system catalogs concurrently REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1260_index; -- no catalog toast index ERROR: cannot reindex system catalogs concurrently REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM +ERROR: syntax error at or near "CONCURRENTLY" +LINE 1: REINDEX SYSTEM CONCURRENTLY postgres; + ^ +REINDEX (CONCURRENTLY) SYSTEM postgres; -- ditto +ERROR: cannot reindex system catalogs concurrently +REINDEX (CONCURRENTLY) SYSTEM; -- ditto ERROR: cannot reindex system catalogs concurrently -- Warns about catalog relations REINDEX SCHEMA CONCURRENTLY pg_catalog; diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql index d8fded3d930..4b75790e472 100644 --- a/src/test/regress/sql/create_index.sql +++ b/src/test/regress/sql/create_index.sql @@ -1072,6 +1072,8 @@ REINDEX INDEX CONCURRENTLY pg_class_oid_index; -- no catalog index REINDEX TABLE CONCURRENTLY pg_toast.pg_toast_1260; -- no catalog toast table REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1260_index; -- no catalog toast index REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM +REINDEX (CONCURRENTLY) SYSTEM postgres; -- ditto +REINDEX (CONCURRENTLY) SYSTEM; -- ditto -- Warns about catalog relations REINDEX SCHEMA CONCURRENTLY pg_catalog; |