From 4189e3d659abb48d159a6c3faabaa7e99498ca3e Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 16 Jan 2016 20:46:14 -0500 Subject: [PATCH] psql: Add completion support for DROP INDEX CONCURRENTLY based on patch by Kyotaro Horiguchi --- src/bin/psql/tab-complete.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 878d4f0701..c3c77bd587 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -2009,8 +2009,8 @@ psql_completion(const char *text, int start, int end) else if (TailMatches3("INDEX|CONCURRENTLY", MatchAny, "ON") || TailMatches2("INDEX|CONCURRENTLY", "ON")) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tm, NULL); - /* Complete ... INDEX CONCURRENTLY with "ON" and existing indexes */ - else if (TailMatches2("INDEX", "CONCURRENTLY")) + /* Complete CREATE|UNIQUE INDEX CONCURRENTLY with "ON" and existing indexes */ + else if (TailMatches3("CREATE|UNIQUE", "INDEX", "CONCURRENTLY")) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes, " UNION SELECT 'ON'"); /* Complete CREATE|UNIQUE INDEX [CONCURRENTLY] with "ON" */ @@ -2247,7 +2247,7 @@ psql_completion(const char *text, int start, int end) /* DROP */ /* Complete DROP object with CASCADE / RESTRICT */ else if (Matches3("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) || (Matches4("DROP", "AGGREGATE|FUNCTION", MatchAny, MatchAny) && ends_with(prev_wd, ')')) || @@ -2265,6 +2265,17 @@ psql_completion(const char *text, int start, int end) else if (Matches2("DROP", "FOREIGN")) COMPLETE_WITH_LIST2("DATA WRAPPER", "TABLE"); + /* DROP INDEX */ + else if (Matches2("DROP", "INDEX")) + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes, + " UNION SELECT 'CONCURRENTLY'"); + else if (Matches3("DROP", "INDEX", "CONCURRENTLY")) + COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes, NULL); + else if (Matches3("DROP", "INDEX", MatchAny)) + COMPLETE_WITH_LIST2("CASCADE", "RESTRICT"); + else if (Matches4("DROP", "INDEX", "CONCURRENTLY", MatchAny)) + COMPLETE_WITH_LIST2("CASCADE", "RESTRICT"); + /* DROP MATERIALIZED VIEW */ else if (Matches2("DROP", "MATERIALIZED")) COMPLETE_WITH_CONST("VIEW");