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
This commit is contained in:
Alvaro Herrera 2022-07-22 19:23:39 +02:00
parent 0b292bed92
commit 83011ce7d7
No known key found for this signature in database
GPG Key ID: 1C20ACB9D5C564AE
4 changed files with 38 additions and 58 deletions

View File

@ -22,7 +22,8 @@ PostgreSQL documentation
<refsynopsisdiv> <refsynopsisdiv>
<synopsis> <synopsis>
REINDEX [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] { INDEX | TABLE | SCHEMA } [ CONCURRENTLY ] <replaceable class="parameter">name</replaceable> REINDEX [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] { INDEX | TABLE | SCHEMA } [ CONCURRENTLY ] <replaceable class="parameter">name</replaceable>
REINDEX [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] { DATABASE | SYSTEM } [ CONCURRENTLY ] [ <replaceable class="parameter">name</replaceable> ] REINDEX [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] DATABASE [ CONCURRENTLY ] [ <replaceable class="parameter">name</replaceable> ]
REINDEX [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] SYSTEM [ <replaceable class="parameter">name</replaceable> ]
<phrase>where <replaceable class="parameter">option</replaceable> can be one of:</phrase> <phrase>where <replaceable class="parameter">option</replaceable> can be one of:</phrase>

View File

@ -336,7 +336,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%type <str> opt_single_name %type <str> opt_single_name
%type <list> opt_qualified_name %type <list> opt_qualified_name
%type <boolean> opt_concurrently %type <boolean> opt_concurrently
%type <dbehavior> opt_drop_behavior %type <dbehavior> opt_drop_behavior
%type <node> alter_column_default opclass_item opclass_drop alter_using %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 <defelt> generic_option_elem alter_generic_option_elem
%type <list> generic_option_list alter_generic_option_list %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 <node> copy_generic_opt_arg copy_generic_opt_arg_list_item
%type <defelt> copy_generic_opt_elem %type <defelt> copy_generic_opt_elem
@ -9091,78 +9092,54 @@ DropTransformStmt: DROP TRANSFORM opt_if_exists FOR Typename LANGUAGE name opt_d
* *
* QUERY: * QUERY:
* *
* REINDEX [ (options) ] type [CONCURRENTLY] <name> * REINDEX [ (options) ] {TABLE | INDEX | SCHEMA} [CONCURRENTLY] <name>
* REINDEX [ (options) ] DATABASE [CONCURRENTLY] [<name>]
* REINDEX [ (options) ] SYSTEM [<name>]
*****************************************************************************/ *****************************************************************************/
ReindexStmt: 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); ReindexStmt *n = makeNode(ReindexStmt);
n->kind = $2; n->kind = $3;
n->relation = $4; n->relation = $5;
n->name = NULL; n->name = NULL;
n->params = NIL; n->params = $2;
if ($3) if ($4)
n->params = lappend(n->params, n->params = lappend(n->params,
makeDefElem("concurrently", NULL, @3)); makeDefElem("concurrently", NULL, @4));
$$ = (Node *) n; $$ = (Node *) n;
} }
| REINDEX reindex_target_multitable opt_concurrently name | REINDEX opt_reindex_option_list SCHEMA opt_concurrently name
{ {
ReindexStmt *n = makeNode(ReindexStmt); ReindexStmt *n = makeNode(ReindexStmt);
n->kind = $2; n->kind = REINDEX_OBJECT_SCHEMA;
n->name = $4; n->name = $5;
n->relation = NULL; n->relation = NULL;
n->params = NIL; n->params = $2;
if ($3) if ($4)
n->params = lappend(n->params, n->params = lappend(n->params,
makeDefElem("concurrently", NULL, @3)); makeDefElem("concurrently", NULL, @4));
$$ = (Node *) n; $$ = (Node *) n;
} }
| REINDEX reindex_name_optional | REINDEX opt_reindex_option_list DATABASE opt_concurrently opt_single_name
{ {
ReindexStmt *n = makeNode(ReindexStmt); ReindexStmt *n = makeNode(ReindexStmt);
n->kind = $2; n->kind = REINDEX_OBJECT_DATABASE;
n->name = NULL; n->name = NULL;
n->relation = NULL; n->relation = NULL;
n->params = NIL; n->params = $2;
$$ = (Node *)n;
}
| REINDEX '(' utility_option_list ')' reindex_name_optional
{
ReindexStmt *n = makeNode(ReindexStmt);
n->kind = $5;
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));
$$ = (Node *) n; $$ = (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); ReindexStmt *n = makeNode(ReindexStmt);
n->kind = REINDEX_OBJECT_SYSTEM;
n->kind = $5; n->name = NULL;
n->name = $7;
n->relation = NULL; n->relation = NULL;
n->params = $3; n->params = $2;
if ($6)
n->params = lappend(n->params,
makeDefElem("concurrently", NULL, @6));
$$ = (Node *) n; $$ = (Node *) n;
} }
; ;
@ -9170,15 +9147,9 @@ reindex_target_type:
INDEX { $$ = REINDEX_OBJECT_INDEX; } INDEX { $$ = REINDEX_OBJECT_INDEX; }
| TABLE { $$ = REINDEX_OBJECT_TABLE; } | TABLE { $$ = REINDEX_OBJECT_TABLE; }
; ;
reindex_target_multitable: opt_reindex_option_list:
SCHEMA { $$ = REINDEX_OBJECT_SCHEMA; } '(' utility_option_list ')' { $$ = $2; }
| SYSTEM_P { $$ = REINDEX_OBJECT_SYSTEM; } | /* EMPTY */ { $$ = NULL; }
| DATABASE { $$ = REINDEX_OBJECT_DATABASE; }
;
/* For these options the name is optional */
reindex_name_optional:
SYSTEM_P { $$ = REINDEX_OBJECT_SYSTEM; }
| DATABASE { $$ = REINDEX_OBJECT_DATABASE; }
; ;
/***************************************************************************** /*****************************************************************************

View File

@ -2521,6 +2521,12 @@ ERROR: cannot reindex system catalogs concurrently
REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1260_index; -- no catalog toast index REINDEX INDEX CONCURRENTLY pg_toast.pg_toast_1260_index; -- no catalog toast index
ERROR: cannot reindex system catalogs concurrently ERROR: cannot reindex system catalogs concurrently
REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM 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 ERROR: cannot reindex system catalogs concurrently
-- Warns about catalog relations -- Warns about catalog relations
REINDEX SCHEMA CONCURRENTLY pg_catalog; REINDEX SCHEMA CONCURRENTLY pg_catalog;

View File

@ -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 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 INDEX CONCURRENTLY pg_toast.pg_toast_1260_index; -- no catalog toast index
REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM REINDEX SYSTEM CONCURRENTLY postgres; -- not allowed for SYSTEM
REINDEX (CONCURRENTLY) SYSTEM postgres; -- ditto
REINDEX (CONCURRENTLY) SYSTEM; -- ditto
-- Warns about catalog relations -- Warns about catalog relations
REINDEX SCHEMA CONCURRENTLY pg_catalog; REINDEX SCHEMA CONCURRENTLY pg_catalog;