"CLUSTER VERBOSE" tab completion

Started by Jeff Janesover 13 years ago3 messages
#1Jeff Janes
jeff.janes@gmail.com
1 attachment(s)

tab completion will add "USING" after CLUSTER VERBOSE, as if VERBOSE
were the name of a table.

Instead of just making it not do the wrong thing, I tried to make it
actually do the right thing.

It doesn't fill in the VERBOSE for you, you have to type that in full,
but then it completes table names afterward (and USING and index names
after that)

Cheers,

Jeff

Attachments:

cluster_verbose_complete_v1.patchapplication/octet-stream; name=cluster_verbose_complete_v1.patchDownload
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
new file mode 100644
index a1bb230..4f73d70
*** a/src/bin/psql/tab-complete.c
--- b/src/bin/psql/tab-complete.c
*************** psql_completion(char *text, int start, i
*** 1645,1658 ****
  /* CLUSTER */
  
  	/*
! 	 * 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");
  	}
--- 1645,1673 ----
  /* CLUSTER */
  
  	/*
! 	 * 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 the previous words are CLUSTER VERBOSE produce list of tables
+ 	 */
+ 	else if (pg_strcasecmp(prev_wd, "VERBOSE") == 0 &&
+ 			 pg_strcasecmp(prev2_wd, "CLUSTER") == 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 &&
! 			 pg_strcasecmp(prev_wd, "VERBOSE") != 0)
! 	{
! 		COMPLETE_WITH_CONST("USING");
! 	}
! 	/* If we have CLUSTER VERBOSE <sth>, then add "USING" */
! 	else if (pg_strcasecmp(prev3_wd, "CLUSTER") == 0 &&
! 			 pg_strcasecmp(prev2_wd, "VERBOSE") == 0)
  	{
  		COMPLETE_WITH_CONST("USING");
  	}
*************** psql_completion(char *text, int start, i
*** 1667,1672 ****
--- 1682,1698 ----
  		COMPLETE_WITH_QUERY(Query_for_index_of_table);
  	}
  
+ 	/*
+ 	 * If we have CLUSTER VERBOSE <sth> USING, then add the index as well.
+ 	 */
+ 	else if (pg_strcasecmp(prev4_wd, "CLUSTER") == 0 &&
+              pg_strcasecmp(prev3_wd, "VERBOSE") == 0 &&
+ 			 pg_strcasecmp(prev_wd, "USING") == 0)
+ 	{
+ 		completion_info_charp = prev2_wd;
+ 		COMPLETE_WITH_QUERY(Query_for_index_of_table);
+ 	}
+ 
  /* COMMENT */
  	else if (pg_strcasecmp(prev_wd, "COMMENT") == 0)
  		COMPLETE_WITH_CONST("ON");
#2Jeff Janes
jeff.janes@gmail.com
In reply to: Jeff Janes (#1)
1 attachment(s)
Re: "CLUSTER VERBOSE" tab completion

On Fri, Aug 17, 2012 at 7:18 PM, Jeff Janes <jeff.janes@gmail.com> wrote:

tab completion will add "USING" after CLUSTER VERBOSE, as if VERBOSE
were the name of a table.

Instead of just making it not do the wrong thing, I tried to make it
actually do the right thing.

It doesn't fill in the VERBOSE for you, you have to type that in full,

This short coming has now been rectified.

Cheers,

Jeff

Attachments:

cluster_verbose_complete_v2.patchapplication/octet-stream; name=cluster_verbose_complete_v2.patchDownload
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
new file mode 100644
index a1bb230..8216e86
*** a/src/bin/psql/tab-complete.c
--- b/src/bin/psql/tab-complete.c
*************** psql_completion(char *text, int start, i
*** 1645,1658 ****
  /* CLUSTER */
  
  	/*
! 	 * 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");
  	}
--- 1645,1673 ----
  /* CLUSTER */
  
  	/*
! 	 * 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, "UNION SELECT 'VERBOSE'");
+ 
+ 	/*
+ 	 * If the previous words are CLUSTER VERBOSE produce list of tables
+ 	 */
+ 	else if (pg_strcasecmp(prev_wd, "VERBOSE") == 0 &&
+ 			 pg_strcasecmp(prev2_wd, "CLUSTER") == 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 &&
! 			 pg_strcasecmp(prev_wd, "VERBOSE") != 0)
! 	{
! 		COMPLETE_WITH_CONST("USING");
! 	}
! 	/* If we have CLUSTER VERBOSE <sth>, then add "USING" */
! 	else if (pg_strcasecmp(prev3_wd, "CLUSTER") == 0 &&
! 			 pg_strcasecmp(prev2_wd, "VERBOSE") == 0)
  	{
  		COMPLETE_WITH_CONST("USING");
  	}
*************** psql_completion(char *text, int start, i
*** 1664,1669 ****
--- 1679,1695 ----
  			 pg_strcasecmp(prev_wd, "USING") == 0)
  	{
  		completion_info_charp = prev2_wd;
+ 		COMPLETE_WITH_QUERY(Query_for_index_of_table);
+ 	}
+ 
+ 	/*
+ 	 * If we have CLUSTER VERBOSE <sth> USING, then add the index as well.
+ 	 */
+ 	else if (pg_strcasecmp(prev4_wd, "CLUSTER") == 0 &&
+              pg_strcasecmp(prev3_wd, "VERBOSE") == 0 &&
+ 			 pg_strcasecmp(prev_wd, "USING") == 0)
+ 	{
+ 		completion_info_charp = prev2_wd;
  		COMPLETE_WITH_QUERY(Query_for_index_of_table);
  	}
  
#3Robert Haas
robertmhaas@gmail.com
In reply to: Jeff Janes (#2)
Re: "CLUSTER VERBOSE" tab completion

On Sun, Aug 19, 2012 at 4:55 PM, Jeff Janes <jeff.janes@gmail.com> wrote:

On Fri, Aug 17, 2012 at 7:18 PM, Jeff Janes <jeff.janes@gmail.com> wrote:

tab completion will add "USING" after CLUSTER VERBOSE, as if VERBOSE
were the name of a table.

Instead of just making it not do the wrong thing, I tried to make it
actually do the right thing.

It doesn't fill in the VERBOSE for you, you have to type that in full,

This short coming has now been rectified.

Committed this one too. Thanks for the patch.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company