>From d3afe85dded940d67480f305aecb6ab9fb4f9503 Mon Sep 17 00:00:00 2001
From: Kyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp>
Date: Tue, 22 Dec 2015 12:51:41 +0900
Subject: [PATCH 2/2] Fix tab completion for DROP INDEX

DROP INDEX didn't get suggestions of "CONCURRENTLY", or "IF
EXISTS". This patch introduces such suggestions.
---
 src/bin/psql/tab-complete.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index fb3833b..45bee03 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -2199,7 +2199,7 @@ psql_completion(const char *text, int start, int end)
 /* DROP (when not the previous word) */
 	/* DROP object with CASCADE / RESTRICT */
 	else if (TailMatches3("DROP",
-						  "COLLATION|CONVERSION|DOMAIN|EXTENSION|INDEX|LANGUAGE|SCHEMA|SEQUENCE|SERVER|TABLE|TYPE|VIEW",
+						  "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|SCHEMA|SEQUENCE|SERVER|TABLE|TYPE|VIEW",
 						  MatchAny) ||
 		   (TailMatches4("DROP", "AGGREGATE|FUNCTION", MatchAny, MatchAny) &&
 			ends_with(prev_wd, ')')) ||
@@ -2217,6 +2217,22 @@ psql_completion(const char *text, int start, int end)
 	else if (TailMatches2("DROP", "FOREIGN"))
 		COMPLETE_WITH_LIST2("DATA WRAPPER", "TABLE");
 
+	/* DROP INDEX */
+	else if (HeadMatches2("DROP", "INDEX"))
+	{
+		if (TailMatches1("INDEX"))
+			COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes,
+									   " UNION SELECT 'IF EXISTS'"
+									   " UNION SELECT 'CONCURRENTLY'");
+		else if (TailMatches1("CONCURRENTLY"))
+			COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes,
+									   " UNION SELECT 'IF EXISTS'");
+		else if (TailMatches2("IF", "EXISTS"))
+			COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes, NULL);
+		else 
+			COMPLETE_WITH_LIST2("CASCADE", "RESTRICT");
+	}
+
 	/* DROP MATERIALIZED VIEW */
 	else if (TailMatches2("DROP", "MATERIALIZED"))
 		COMPLETE_WITH_CONST("VIEW");
-- 
1.8.3.1

