Index: src/doc/src/sgml/ref/cluster.sgml
===================================================================
*** src.orig/doc/src/sgml/ref/cluster.sgml      2007-03-28 23:02:12.000000000 
+0200
--- src/doc/src/sgml/ref/cluster.sgml   2007-03-28 23:03:14.000000000 +0200
***************
*** 20,27 ****
  
   <refsynopsisdiv>
  <synopsis>
! CLUSTER <replaceable class="PARAMETER">indexname</replaceable> ON 
<replaceable class="PARAMETER">tablename</replaceable>
! CLUSTER <replaceable class="PARAMETER">tablename</replaceable>
  CLUSTER
  </synopsis>
   </refsynopsisdiv>
--- 20,26 ----
  
   <refsynopsisdiv>
  <synopsis>
! CLUSTER <replaceable class="PARAMETER">tablename</replaceable> [ USING 
<replaceable class="PARAMETER">indexname</replaceable> ]
  CLUSTER
  </synopsis>
   </refsynopsisdiv>
Index: src/src/backend/parser/gram.y
===================================================================
*** src.orig/src/backend/parser/gram.y  2007-03-28 22:58:48.000000000 +0200
--- src/src/backend/parser/gram.y       2007-03-28 22:59:15.000000000 +0200
***************
*** 209,215 ****
  
  %type <str>           relation_name copy_file_name
                                database_name access_method_clause 
access_method attr_name
!                               index_name name file_name
  
  %type <list>  func_name handler_name qual_Op qual_all_Op subquery_Op
                                opt_class opt_validator
--- 209,215 ----
  
  %type <str>           relation_name copy_file_name
                                database_name access_method_clause 
access_method attr_name
!                               index_name name file_name opt_cluster_using
  
  %type <list>  func_name handler_name qual_Op qual_all_Op subquery_Op
                                opt_class opt_validator
***************
*** 5327,5332 ****
--- 5327,5333 ----
   *
   *            QUERY:
   *                            cluster <index_name> on <qualified_name>
+  *                            cluster <qualified_name> USING <index_name>
   *                            cluster <qualified_name>
   *                            cluster
   *
***************
*** 5340,5350 ****
                                   n->indexname = $2;
                                   $$ = (Node*)n;
                                }
!                       | CLUSTER qualified_name
                                {
                               ClusterStmt *n = makeNode(ClusterStmt);
                                   n->relation = $2;
!                                  n->indexname = NULL;
                                   $$ = (Node*)n;
                                }
                        | CLUSTER
--- 5341,5351 ----
                                   n->indexname = $2;
                                   $$ = (Node*)n;
                                }
!                       | CLUSTER qualified_name opt_cluster_using
                                {
                               ClusterStmt *n = makeNode(ClusterStmt);
                                   n->relation = $2;
!                                  n->indexname = $3;
                                   $$ = (Node*)n;
                                }
                        | CLUSTER
***************
*** 5356,5361 ****
--- 5357,5368 ----
                                }
                ;
  
+ opt_cluster_using:
+                       USING index_name                        { $$ = $2; }
+                       | /*EMPTY*/                             { $$ = NULL; }
+               ;
+ 
+ 
  /*****************************************************************************
   *
   *            QUERY:
Index: src/src/bin/psql/tab-complete.c
===================================================================
*** src.orig/src/bin/psql/tab-complete.c        2007-03-28 22:58:48.000000000 
+0200
--- src/src/bin/psql/tab-complete.c     2007-03-28 22:59:15.000000000 +0200
***************
*** 822,832 ****
  
                COMPLETE_WITH_LIST(list_COLUMNALTER);
        }
!       else if (pg_strcasecmp(prev3_wd, "TABLE") == 0 &&
!                        pg_strcasecmp(prev_wd, "CLUSTER") == 0)
                COMPLETE_WITH_CONST("ON");
        else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&
-                        pg_strcasecmp(prev2_wd, "CLUSTER") == 0 &&
                         pg_strcasecmp(prev_wd, "ON") == 0)
        {
                completion_info_charp = prev3_wd;
--- 822,830 ----
  
                COMPLETE_WITH_LIST(list_COLUMNALTER);
        }
!       else if (pg_strcasecmp(prev3_wd, "TABLE") == 0)
                COMPLETE_WITH_CONST("ON");
        else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&
                         pg_strcasecmp(prev_wd, "ON") == 0)
        {
                completion_info_charp = prev3_wd;
***************
*** 929,952 ****
  
        /*
         * If the previous word is CLUSTER and not without produce list of
!        * indexes.
         */
        else if (pg_strcasecmp(prev_wd, "CLUSTER") == 0 &&
                         pg_strcasecmp(prev2_wd, "WITHOUT") != 0)
!               COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes, NULL);
!       /* If we have CLUSTER <sth>, then add "ON" */
        else if (pg_strcasecmp(prev2_wd, "CLUSTER") == 0 &&
!                        pg_strcasecmp(prev_wd, "ON") != 0)
!               COMPLETE_WITH_CONST("ON");
  
        /*
!        * If we have CLUSTER <sth> ON, then add the correct tablename as well.
         */
        else if (pg_strcasecmp(prev3_wd, "CLUSTER") == 0 &&
!                        pg_strcasecmp(prev_wd, "ON") == 0)
        {
                completion_info_charp = prev2_wd;
!               COMPLETE_WITH_QUERY(Query_for_table_owning_index);
        }
  
  /* COMMENT */
--- 927,951 ----
  
        /*
         * If the previous word is CLUSTER and not without produce list of
!        * tables
         */
        else if (pg_strcasecmp(prev_wd, "CLUSTER") == 0 &&
                         pg_strcasecmp(prev2_wd, "WITHOUT") != 0)
!               COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
!       /* If we have CLUSTER <sth>, then add "USING" */
        else if (pg_strcasecmp(prev2_wd, "CLUSTER") == 0 &&
!                        pg_strcasecmp(prev_wd, "ON") != 0) {
!               COMPLETE_WITH_CONST("USING");
!       }
  
        /*
!        * If we have CLUSTER <sth> USING, then add the index as well.
         */
        else if (pg_strcasecmp(prev3_wd, "CLUSTER") == 0 &&
!                        pg_strcasecmp(prev_wd, "USING") == 0)
        {
                completion_info_charp = prev2_wd;
!               COMPLETE_WITH_QUERY(Query_for_index_of_table);
        }
  
  /* COMMENT */
Index: src/src/test/regress/expected/cluster.out
===================================================================
*** src.orig/src/test/regress/expected/cluster.out      2007-03-28 
22:58:48.000000000 +0200
--- src/src/test/regress/expected/cluster.out   2007-03-28 22:59:15.000000000 
+0200
***************
*** 329,335 ****
  CLUSTER clstr_2;
  ERROR:  there is no previously clustered index for table "clstr_2"
  CLUSTER clstr_1_pkey ON clstr_1;
! CLUSTER clstr_2_pkey ON clstr_2;
  SELECT * FROM clstr_1 UNION ALL
    SELECT * FROM clstr_2 UNION ALL
    SELECT * FROM clstr_3;
--- 329,335 ----
  CLUSTER clstr_2;
  ERROR:  there is no previously clustered index for table "clstr_2"
  CLUSTER clstr_1_pkey ON clstr_1;
! CLUSTER clstr_2 USING clstr_2_pkey;
  SELECT * FROM clstr_1 UNION ALL
    SELECT * FROM clstr_2 UNION ALL
    SELECT * FROM clstr_3;
Index: src/src/test/regress/sql/cluster.sql
===================================================================
*** src.orig/src/test/regress/sql/cluster.sql   2007-03-28 22:58:48.000000000 
+0200
--- src/src/test/regress/sql/cluster.sql        2007-03-28 22:59:15.000000000 
+0200
***************
*** 122,128 ****
  CLUSTER clstr_2;
  
  CLUSTER clstr_1_pkey ON clstr_1;
! CLUSTER clstr_2_pkey ON clstr_2;
  SELECT * FROM clstr_1 UNION ALL
    SELECT * FROM clstr_2 UNION ALL
    SELECT * FROM clstr_3;
--- 122,128 ----
  CLUSTER clstr_2;
  
  CLUSTER clstr_1_pkey ON clstr_1;
! CLUSTER clstr_2 USING clstr_2_pkey;
  SELECT * FROM clstr_1 UNION ALL
    SELECT * FROM clstr_2 UNION ALL
    SELECT * FROM clstr_3;

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
       subscribe-nomail command to [EMAIL PROTECTED] so that your
       message can get through to the mailing list cleanly

Reply via email to