[PATCH] add CLUSTER table USING index - Mailing list pgsql-patches
From | Holger Schurig |
---|---|
Subject | [PATCH] add CLUSTER table USING index |
Date | |
Msg-id | 200703282241.12383.holgerschurig@gmx.de Whole thread Raw |
Responses |
Re: [PATCH] add CLUSTER table USING index
|
List | pgsql-patches |
Index: src/doc/TODO =================================================================== *** src.orig/doc/TODO 2007-03-27 21:18:01.000000000 +0200 --- src/doc/TODO 2007-03-27 21:18:26.000000000 +0200 *************** *** 624,631 **** o %Add VERBOSE option to report tables as they are processed, like VACUUM VERBOSE - o Add more logical syntax CLUSTER table ORDER BY index; - support current syntax for backward compatibility * COPY --- 624,629 ---- Index: src/doc/src/FAQ/TODO.html =================================================================== *** src.orig/doc/src/FAQ/TODO.html 2007-03-27 21:18:01.000000000 +0200 --- src/doc/src/FAQ/TODO.html 2007-03-27 21:18:26.000000000 +0200 *************** *** 558,565 **** </p> </li><li>%Add VERBOSE option to report tables as they are processed, like VACUUM VERBOSE - </li><li>Add more logical syntax CLUSTER table ORDER BY index; - support current syntax for backward compatibility </li></ul> </li><li>COPY <ul> --- 558,563 ---- Index: src/src/backend/parser/gram.y =================================================================== *** src.orig/src/backend/parser/gram.y 2007-03-27 21:18:01.000000000 +0200 --- src/src/backend/parser/gram.y 2007-03-27 21:18:26.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_order_by: + USING index_name { $$ = $3; } + | /*EMPTY*/ { $$ = NULL; } + ; + + /***************************************************************************** * * QUERY: Index: src/src/bin/psql/sql_help.h =================================================================== *** src.orig/src/bin/psql/sql_help.h 2007-03-27 21:18:01.000000000 +0200 --- src/src/bin/psql/sql_help.h 2007-03-27 21:18:26.000000000 +0200 *************** *** 119,125 **** { "CLUSTER", N_("cluster a table according to an index"), ! N_("CLUSTER indexname ON tablename\nCLUSTER tablename\nCLUSTER") }, { "COMMENT", N_("define or change the comment of an object"), --- 119,125 ---- { "CLUSTER", N_("cluster a table according to an index"), ! N_("CLUSTER tablename [USING indexname]\nCLUSTER") }, { "COMMENT", N_("define or change the comment of an object"), Index: src/src/bin/psql/tab-complete.c =================================================================== *** src.orig/src/bin/psql/tab-complete.c 2007-03-27 21:18:01.000000000 +0200 --- src/src/bin/psql/tab-complete.c 2007-03-27 21:18:26.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,952 ---- /* * 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> ORDER BY, then add the index as well. */ ! else if (pg_strcasecmp(prev3_wd, "CLUSTER") == 0 && ! pg_strcasecmp(prev_wd, "USING") == 0 && ! XXXXX pg_strcasecmp(prev2_wd, "ORDER") == 0) { ! completion_info_charp = prev3_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-27 21:18:01.000000000 +0200 --- src/src/test/regress/expected/cluster.out 2007-03-27 21:18:26.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-27 21:18:01.000000000 +0200 --- src/src/test/regress/sql/cluster.sql 2007-03-27 21:18:26.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;
pgsql-patches by date: