]> granicus.if.org Git - postgresql/commitdiff
psql: Add tab completion for COPY with query
authorPeter Eisentraut <peter_e@gmx.net>
Thu, 21 Jan 2016 02:27:46 +0000 (21:27 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Thu, 21 Jan 2016 02:27:46 +0000 (21:27 -0500)
From: Andreas Karlsson <andreas@proxel.se>

src/bin/psql/tab-complete.c

index c3c77bd58765371aeebf8d0540c5be3dc415d3b8..f09e65c58ddf3eacf34690dcd1d3c1c7ecee29ef 100644 (file)
@@ -1934,11 +1934,18 @@ psql_completion(const char *text, int start, int end)
 /* COPY */
 
        /*
-        * If we have COPY [BINARY] (which you'd have to type yourself), offer
-        * list of tables (Also cover the analogous backslash command)
+        * If we have COPY, offer list of tables or "(" (Also cover the analogous
+        * backslash command).
         */
-       else if (Matches1("COPY|\\copy") || Matches2("COPY", "BINARY"))
+       else if (Matches1("COPY|\\copy"))
+               COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables,
+                                                                  " UNION ALL SELECT '('");
+       /* If we have COPY BINARY, complete with list of tables */
+       else if (Matches2("COPY", "BINARY"))
                COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
+       /* If we have COPY (, complete it with legal commands */
+       else if (Matches2("COPY|\\copy", "("))
+               COMPLETE_WITH_LIST7("SELECT", "TABLE", "VALUES", "INSERT", "UPDATE", "DELETE", "WITH");
        /* If we have COPY [BINARY] <sth>, complete it with "TO" or "FROM" */
        else if (Matches2("COPY|\\copy", MatchAny) ||
                         Matches3("COPY", "BINARY", MatchAny))