Support parenthesized syntax for CLUSTER without a table name.

b5913f6120 added a parenthesized syntax for CLUSTER, but it
requires specifying a table name.  This is unlike commands such as
VACUUM and ANALYZE, which do not require specifying a table in the
parenthesized syntax.  This change resolves this inconsistency.
This is preparatory work for a follow-up commit that will move the
unparenthesized syntax to the "Compatibility" section of the
CLUSTER documentation.

Reviewed-by: Melanie Plageman, Michael Paquier
Discussion: https://postgr.es/m/CAAKRu_bc5uHieG1976kGqJKxyWtyQt9yvktjsVX%2Bi7NOigDjOA%40mail.gmail.com
This commit is contained in:
Nathan Bossart 2023-07-19 15:26:52 -07:00
parent 018b61f81b
commit cdaedfc96d
2 changed files with 12 additions and 2 deletions

View File

@ -21,7 +21,7 @@ PostgreSQL documentation
<refsynopsisdiv> <refsynopsisdiv>
<synopsis> <synopsis>
CLUSTER [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] <replaceable class="parameter">table_name</replaceable> [ USING <replaceable class="parameter">index_name</replaceable> ] CLUSTER [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] [ <replaceable class="parameter">table_name</replaceable> [ USING <replaceable class="parameter">index_name</replaceable> ] ]
CLUSTER [ VERBOSE ] [ <replaceable class="parameter">table_name</replaceable> [ USING <replaceable class="parameter">index_name</replaceable> ] ] CLUSTER [ VERBOSE ] [ <replaceable class="parameter">table_name</replaceable> [ USING <replaceable class="parameter">index_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

@ -11553,7 +11553,7 @@ CreateConversionStmt:
/***************************************************************************** /*****************************************************************************
* *
* QUERY: * QUERY:
* CLUSTER (options) <qualified_name> [ USING <index_name> ] * CLUSTER (options) [ <qualified_name> [ USING <index_name> ] ]
* CLUSTER [VERBOSE] [ <qualified_name> [ USING <index_name> ] ] * CLUSTER [VERBOSE] [ <qualified_name> [ USING <index_name> ] ]
* CLUSTER [VERBOSE] <index_name> ON <qualified_name> (for pre-8.3) * CLUSTER [VERBOSE] <index_name> ON <qualified_name> (for pre-8.3)
* *
@ -11569,6 +11569,15 @@ ClusterStmt:
n->params = $3; n->params = $3;
$$ = (Node *) n; $$ = (Node *) n;
} }
| CLUSTER '(' utility_option_list ')'
{
ClusterStmt *n = makeNode(ClusterStmt);
n->relation = NULL;
n->indexname = NULL;
n->params = $3;
$$ = (Node *) n;
}
/* unparenthesized VERBOSE kept for pre-14 compatibility */ /* unparenthesized VERBOSE kept for pre-14 compatibility */
| CLUSTER opt_verbose qualified_name cluster_index_specification | CLUSTER opt_verbose qualified_name cluster_index_specification
{ {
@ -11581,6 +11590,7 @@ ClusterStmt:
n->params = lappend(n->params, makeDefElem("verbose", NULL, @2)); n->params = lappend(n->params, makeDefElem("verbose", NULL, @2));
$$ = (Node *) n; $$ = (Node *) n;
} }
/* unparenthesized VERBOSE kept for pre-17 compatibility */
| CLUSTER opt_verbose | CLUSTER opt_verbose
{ {
ClusterStmt *n = makeNode(ClusterStmt); ClusterStmt *n = makeNode(ClusterStmt);