Update tab-completion for CREATE PUBLICATION with sequences
authorTomas Vondra
Fri, 25 Mar 2022 12:24:14 +0000 (13:24 +0100)
committerTomas Vondra
Fri, 25 Mar 2022 12:24:14 +0000 (13:24 +0100)
Commit 75b1521dae added support for sequences to built-in replication,
but the tab-completion was updated only for ALTER PUBLICATION, not for
CREATE PUBLICATION.

Report and patch by Masahiko Sawada.

Author: Masahiko Sawada
Discussion: https://postgr.es/m/CAD21AoDtKpdJcHOLjfPQ7TmpFqNB5__%3DQ_g1e8OBRrwT5LP-%3Dg%40mail.gmail.com

src/bin/psql/tab-complete.c

index e59bd8302d65f457d17ac38327d7de998fdb1fae..63bfdf11c678647f6a57380bc3a90d18b171aa37 100644 (file)
@@ -2971,21 +2971,27 @@ psql_completion(const char *text, int start, int end)
 
 /* CREATE PUBLICATION */
    else if (Matches("CREATE", "PUBLICATION", MatchAny))
-       COMPLETE_WITH("FOR TABLE", "FOR ALL TABLES", "FOR ALL TABLES IN SCHEMA", "WITH (");
+       COMPLETE_WITH("FOR TABLE", "FOR ALL TABLES", "FOR ALL TABLES IN SCHEMA",
+                     "FOR SEQUENCE", "FOR ALL SEQUENCES", "FOR ALL SEQUENCES IN SCHEMA",
+                     "WITH (");
    else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR"))
-       COMPLETE_WITH("TABLE", "ALL TABLES", "ALL TABLES IN SCHEMA");
+       COMPLETE_WITH("TABLE", "ALL TABLES", "ALL TABLES IN SCHEMA",
+                     "SEQUENCE", "ALL SEQUENCES", "ALL SEQUENCES IN SCHEMA");
    else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL"))
-       COMPLETE_WITH("TABLES", "TABLES IN SCHEMA");
-   else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES"))
+       COMPLETE_WITH("TABLES", "TABLES IN SCHEMA", "SEQUENCES", "SEQUENCES IN SCHEMA");
+   else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES|SEQUENCES"))
        COMPLETE_WITH("IN SCHEMA", "WITH (");
-   else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "TABLE", MatchAny) && !ends_with(prev_wd, ','))
+   else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "TABLE|SEQUENCE", MatchAny) && !ends_with(prev_wd, ','))
        COMPLETE_WITH("WHERE (", "WITH (");
    /* Complete "CREATE PUBLICATION  FOR TABLE" with ", ..." */
    else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "TABLE"))
        COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
+   /* Complete "CREATE PUBLICATION  FOR SEQUENCE" with ", ..." */
+   else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "SEQUENCE"))
+       COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_sequences);
 
    /*
-    * "CREATE PUBLICATION  FOR TABLE  WHERE (" - complete with
+    * "CREATE PUBLICATION  FOR TABLE|SEQUENCE  WHERE (" - complete with
     * table attributes
     */
    else if (HeadMatches("CREATE", "PUBLICATION", MatchAny) && TailMatches("WHERE"))
@@ -2996,14 +3002,14 @@ psql_completion(const char *text, int start, int end)
        COMPLETE_WITH(" WITH (");
 
    /*
-    * Complete "CREATE PUBLICATION  FOR ALL TABLES IN SCHEMA ,
+    * Complete "CREATE PUBLICATION  FOR ALL TABLES|SEQUENCES IN SCHEMA ,
     * ..."
     */
-   else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "IN", "SCHEMA"))
+   else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES|SEQUENCES", "IN", "SCHEMA"))
        COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
                                 " AND nspname NOT LIKE E'pg\\\\_%%'",
                                 "CURRENT_SCHEMA");
-   else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "IN", "SCHEMA", MatchAny) && (!ends_with(prev_wd, ',')))
+   else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES|SEQUENCES", "IN", "SCHEMA", MatchAny) && (!ends_with(prev_wd, ',')))
        COMPLETE_WITH("WITH (");
    /* Complete "CREATE PUBLICATION  [...] WITH" */
    else if (HeadMatches("CREATE", "PUBLICATION") && TailMatches("WITH", "("))