Skip to content

Commit e55c8e3

Browse files
committed
Support syntax "CLUSTER table USING index", which is more logical.
Holger Schurig
1 parent d7e2de6 commit e55c8e3

File tree

5 files changed

+52
-42
lines changed

5 files changed

+52
-42
lines changed

doc/src/sgml/ref/cluster.sgml

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/ref/cluster.sgml,v 1.40 2007/02/01 00:28:18 momjian Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/ref/cluster.sgml,v 1.41 2007/04/08 00:26:33 momjian Exp $
33
PostgreSQL documentation
44
-->
55

@@ -20,8 +20,7 @@ PostgreSQL documentation
2020

2121
<refsynopsisdiv>
2222
<synopsis>
23-
CLUSTER <replaceable class="PARAMETER">indexname</replaceable> ON <replaceable class="PARAMETER">tablename</replaceable>
24-
CLUSTER <replaceable class="PARAMETER">tablename</replaceable>
23+
CLUSTER <replaceable class="PARAMETER">tablename</replaceable> [ USING <replaceable class="PARAMETER">indexname</replaceable> ]
2524
CLUSTER
2625
</synopsis>
2726
</refsynopsisdiv>
@@ -77,19 +76,19 @@ CLUSTER
7776

7877
<variablelist>
7978
<varlistentry>
80-
<term><replaceable class="PARAMETER">indexname</replaceable></term>
79+
<term><replaceable class="PARAMETER">tablename</replaceable></term>
8180
<listitem>
8281
<para>
83-
The name of an index.
82+
The name (possibly schema-qualified) of a table.
8483
</para>
8584
</listitem>
8685
</varlistentry>
8786

8887
<varlistentry>
89-
<term><replaceable class="PARAMETER">tablename</replaceable></term>
88+
<term><replaceable class="PARAMETER">indexname</replaceable></term>
9089
<listitem>
9190
<para>
92-
The name (possibly schema-qualified) of a table.
91+
The name of an index.
9392
</para>
9493
</listitem>
9594
</varlistentry>
@@ -172,17 +171,17 @@ CREATE TABLE <replaceable class="parameter">newtable</replaceable> AS
172171

173172
<para>
174173
Cluster the table <literal>employees</literal> on the basis of
175-
its index <literal>emp_ind</literal>:
174+
its index <literal>employees_ind</literal>:
176175
<programlisting>
177-
CLUSTER emp_ind ON emp;
176+
CLUSTER employees USING employees_ind;
178177
</programlisting>
179178
</para>
180179

181180
<para>
182181
Cluster the <literal>employees</literal> table using the same
183182
index that was used before:
184183
<programlisting>
185-
CLUSTER emp;
184+
CLUSTER employees;
186185
</programlisting>
187186
</para>
188187

@@ -198,7 +197,12 @@ CLUSTER;
198197
<title>Compatibility</title>
199198

200199
<para>
201-
There is no <command>CLUSTER</command> statement in the SQL standard.
200+
The syntax:
201+
<synopsis>
202+
CLUSTER <replaceable class="PARAMETER">indexname</replaceable> ON <replaceable class="PARAMETER">tablename</replaceable>
203+
</synopsis>
204+
is also supported for compatibility with pre-8.3 <productname>PostgreSQL</> installations.
205+
There is no <command>CLUSTER</command> statement in the SQL standard.
202206
</para>
203207
</refsect1>
204208

src/backend/parser/gram.y

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.586 2007/04/02 22:20:53 momjian Exp $
14+
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.587 2007/04/08 00:26:34 momjian Exp $
1515
*
1616
* HISTORY
1717
* AUTHOR DATE MAJOR EVENT
@@ -209,7 +209,7 @@ static Node *makeXmlExpr(XmlExprOp op, char *name, List *named_args, List *args)
209209

210210
%type <str> relation_name copy_file_name
211211
database_name access_method_clause access_method attr_name
212-
index_name name file_name
212+
index_name name file_name cluster_index_specification
213213

214214
%type <list> func_name handler_name qual_Op qual_all_Op subquery_Op
215215
opt_class opt_validator
@@ -5084,7 +5084,7 @@ opt_check_option:
50845084
/*****************************************************************************
50855085
*
50865086
* QUERY:
5087-
* load "filename"
5087+
* LOAD "filename"
50885088
*
50895089
*****************************************************************************/
50905090

@@ -5346,25 +5346,18 @@ CreateConversionStmt:
53465346
/*****************************************************************************
53475347
*
53485348
* QUERY:
5349-
* cluster <index_name> on <qualified_name>
5350-
* cluster <qualified_name>
5351-
* cluster
5349+
* CLUSTER <qualified_name> [ USING <index_name> ]
5350+
* CLUSTER
5351+
* CLUSTER <index_name> ON <qualified_name> (for pre-8.3)
53525352
*
53535353
*****************************************************************************/
53545354

53555355
ClusterStmt:
5356-
CLUSTER index_name ON qualified_name
5357-
{
5358-
ClusterStmt *n = makeNode(ClusterStmt);
5359-
n->relation = $4;
5360-
n->indexname = $2;
5361-
$$ = (Node*)n;
5362-
}
5363-
| CLUSTER qualified_name
5356+
CLUSTER qualified_name cluster_index_specification
53645357
{
53655358
ClusterStmt *n = makeNode(ClusterStmt);
53665359
n->relation = $2;
5367-
n->indexname = NULL;
5360+
n->indexname = $3;
53685361
$$ = (Node*)n;
53695362
}
53705363
| CLUSTER
@@ -5374,13 +5367,27 @@ ClusterStmt:
53745367
n->indexname = NULL;
53755368
$$ = (Node*)n;
53765369
}
5370+
/* kept for pre-8.3 compatibility */
5371+
| CLUSTER index_name ON qualified_name
5372+
{
5373+
ClusterStmt *n = makeNode(ClusterStmt);
5374+
n->relation = $4;
5375+
n->indexname = $2;
5376+
$$ = (Node*)n;
5377+
}
5378+
;
5379+
5380+
cluster_index_specification:
5381+
USING index_name { $$ = $2; }
5382+
| /*EMPTY*/ { $$ = NULL; }
53775383
;
53785384

5385+
53795386
/*****************************************************************************
53805387
*
53815388
* QUERY:
5382-
* vacuum
5383-
* analyze
5389+
* VACUUM
5390+
* ANALYZE
53845391
*
53855392
*****************************************************************************/
53865393

src/bin/psql/tab-complete.c

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* Copyright (c) 2000-2007, PostgreSQL Global Development Group
55
*
6-
* $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.160 2007/03/26 16:58:40 tgl Exp $
6+
* $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.161 2007/04/08 00:26:34 momjian Exp $
77
*/
88

99
/*----------------------------------------------------------------------
@@ -822,11 +822,9 @@ psql_completion(char *text, int start, int end)
822822

823823
COMPLETE_WITH_LIST(list_COLUMNALTER);
824824
}
825-
else if (pg_strcasecmp(prev3_wd, "TABLE") == 0 &&
826-
pg_strcasecmp(prev_wd, "CLUSTER") == 0)
825+
else if (pg_strcasecmp(prev3_wd, "TABLE") == 0)
827826
COMPLETE_WITH_CONST("ON");
828827
else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&
829-
pg_strcasecmp(prev2_wd, "CLUSTER") == 0 &&
830828
pg_strcasecmp(prev_wd, "ON") == 0)
831829
{
832830
completion_info_charp = prev3_wd;
@@ -929,24 +927,25 @@ psql_completion(char *text, int start, int end)
929927

930928
/*
931929
* If the previous word is CLUSTER and not without produce list of
932-
* indexes.
930+
* tables
933931
*/
934932
else if (pg_strcasecmp(prev_wd, "CLUSTER") == 0 &&
935933
pg_strcasecmp(prev2_wd, "WITHOUT") != 0)
936-
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes, NULL);
937-
/* If we have CLUSTER <sth>, then add "ON" */
934+
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
935+
/* If we have CLUSTER <sth>, then add "USING" */
938936
else if (pg_strcasecmp(prev2_wd, "CLUSTER") == 0 &&
939-
pg_strcasecmp(prev_wd, "ON") != 0)
940-
COMPLETE_WITH_CONST("ON");
937+
pg_strcasecmp(prev_wd, "ON") != 0) {
938+
COMPLETE_WITH_CONST("USING");
939+
}
941940

942941
/*
943-
* If we have CLUSTER <sth> ON, then add the correct tablename as well.
942+
* If we have CLUSTER <sth> ORDER BY, then add the index as well.
944943
*/
945944
else if (pg_strcasecmp(prev3_wd, "CLUSTER") == 0 &&
946-
pg_strcasecmp(prev_wd, "ON") == 0)
945+
pg_strcasecmp(prev_wd, "USING") == 0)
947946
{
948947
completion_info_charp = prev2_wd;
949-
COMPLETE_WITH_QUERY(Query_for_table_owning_index);
948+
COMPLETE_WITH_QUERY(Query_for_index_of_table);
950949
}
951950

952951
/* COMMENT */

src/test/regress/expected/cluster.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ INSERT INTO clstr_3 VALUES (1);
329329
CLUSTER clstr_2;
330330
ERROR: there is no previously clustered index for table "clstr_2"
331331
CLUSTER clstr_1_pkey ON clstr_1;
332-
CLUSTER clstr_2_pkey ON clstr_2;
332+
CLUSTER clstr_2 USING clstr_2_pkey;
333333
SELECT * FROM clstr_1 UNION ALL
334334
SELECT * FROM clstr_2 UNION ALL
335335
SELECT * FROM clstr_3;

src/test/regress/sql/cluster.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ INSERT INTO clstr_3 VALUES (1);
122122
CLUSTER clstr_2;
123123

124124
CLUSTER clstr_1_pkey ON clstr_1;
125-
CLUSTER clstr_2_pkey ON clstr_2;
125+
CLUSTER clstr_2 USING clstr_2_pkey;
126126
SELECT * FROM clstr_1 UNION ALL
127127
SELECT * FROM clstr_2 UNION ALL
128128
SELECT * FROM clstr_3;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy