]> granicus.if.org Git - postgresql/commitdiff
psql: Improve CREATE INDEX CONCURRENTLY tab completion
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 13 Jan 2016 01:31:43 +0000 (20:31 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Wed, 13 Jan 2016 01:54:27 +0000 (20:54 -0500)
The completion of CREATE INDEX CONCURRENTLY was lacking in several ways
compared to a plain CREATE INDEX command:

- CREATE INDEX <name> ON completes table names, but didn't with
  CONCURRENTLY.

- CREATE INDEX completes ON and existing index names, but with
  CONCURRENTLY it only completed ON.

- CREATE INDEX <name> completes ON, but didn't with CONCURRENTLY.

These are now all fixed.

src/bin/psql/tab-complete.c

index 52336aa96d108a36d3a66285161e51734c0dcd17..878d4f0701039c3df833ebb54d050f6af2d8e333 100644 (file)
@@ -2005,15 +2005,17 @@ psql_completion(const char *text, int start, int end)
                COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes,
                                                                   " UNION SELECT 'ON'"
                                                                   " UNION SELECT 'CONCURRENTLY'");
-       /* Complete ... INDEX [<name>] ON with a list of tables  */
-       else if (TailMatches3("INDEX", MatchAny, "ON") ||
+       /* Complete ... INDEX|CONCURRENTLY [<name>] ON with a list of tables  */
+       else if (TailMatches3("INDEX|CONCURRENTLY", MatchAny, "ON") ||
                         TailMatches2("INDEX|CONCURRENTLY", "ON"))
                COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tm, NULL);
-       /* If we have CREATE|UNIQUE INDEX CONCURRENTLY, then add "ON" */
+       /* Complete ... INDEX CONCURRENTLY with "ON" and existing indexes */
        else if (TailMatches2("INDEX", "CONCURRENTLY"))
-               COMPLETE_WITH_CONST("ON");
-       /* If we have CREATE|UNIQUE INDEX <sth>, then add "ON" */
-       else if (TailMatches3("CREATE|UNIQUE", "INDEX", MatchAny))
+               COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_indexes,
+                                                                  " UNION SELECT 'ON'");
+       /* Complete CREATE|UNIQUE INDEX [CONCURRENTLY] <sth> with "ON" */
+       else if (TailMatches3("CREATE|UNIQUE", "INDEX", MatchAny) ||
+                        TailMatches4("CREATE|UNIQUE", "INDEX", "CONCURRENTLY", MatchAny))
                COMPLETE_WITH_CONST("ON");
 
        /*