]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
psql: Fix tab completion for FOREIGN DATA WRAPPER and SUBSCRIPTION.
authorMasahiko Sawada <msawada@postgresql.org>
Wed, 25 Mar 2026 16:30:26 +0000 (09:30 -0700)
committerMasahiko Sawada <msawada@postgresql.org>
Wed, 25 Mar 2026 16:30:26 +0000 (09:30 -0700)
Commit 8185bb5347 extended the CREATE/ALTER SUBSCRIPTION and
CREATE/ALTER FOREIGN DATA WRAPPER commands, but missed the
corresponding tab-completion logic. This commit fixes that oversight
by adding completion support for:

- The CONNECTION keyword in CREATE/ALTER FOREIGN DATA WRAPPER.
- The list of foreign servers in CREATE/ALTER SUBSCRIPTION.

Author: Yamaguchi Atsuo <acrobatcoder@gmail.com>
Discussion: https://postgr.es/m/CAKSyusJWdWcUKVd3qJXcEaQxJewGymQWV_r3-mc=Knrqo0AZ_g@mail.gmail.com

src/bin/psql/tab-complete.in.c

index e3bdbf34a5c6c1a6f8c357c1f23449b1d272e033..523d3f39fc543bb02e24d37e517c1cebb40265e1 100644 (file)
@@ -2353,6 +2353,8 @@ match_previous_words(int pattern_id,
                COMPLETE_WITH("CONNECTION", "ENABLE", "DISABLE", "OWNER TO",
                                          "RENAME TO", "REFRESH PUBLICATION", "REFRESH SEQUENCES",
                                          "SERVER", "SET", "SKIP (", "ADD PUBLICATION", "DROP PUBLICATION");
+       else if (Matches("ALTER", "SUBSCRIPTION", MatchAny, "SERVER"))
+               COMPLETE_WITH_QUERY(Query_for_list_of_servers);
        /* ALTER SUBSCRIPTION <name> REFRESH */
        else if (Matches("ALTER", "SUBSCRIPTION", MatchAny, MatchAnyN, "REFRESH"))
                COMPLETE_WITH("PUBLICATION", "SEQUENCES");
@@ -2469,10 +2471,10 @@ match_previous_words(int pattern_id,
 
        /* ALTER FOREIGN DATA WRAPPER <name> */
        else if (Matches("ALTER", "FOREIGN", "DATA", "WRAPPER", MatchAny))
-               COMPLETE_WITH("HANDLER", "VALIDATOR", "NO",
-                                         "OPTIONS", "OWNER TO", "RENAME TO");
+               COMPLETE_WITH("CONNECTION", "HANDLER", "NO",
+                                         "OPTIONS", "OWNER TO", "RENAME TO", "VALIDATOR");
        else if (Matches("ALTER", "FOREIGN", "DATA", "WRAPPER", MatchAny, "NO"))
-               COMPLETE_WITH("HANDLER", "VALIDATOR");
+               COMPLETE_WITH("CONNECTION", "HANDLER", "VALIDATOR");
 
        /* ALTER FOREIGN TABLE <name> */
        else if (Matches("ALTER", "FOREIGN", "TABLE", MatchAny))
@@ -3559,7 +3561,7 @@ match_previous_words(int pattern_id,
 
        /* CREATE FOREIGN DATA WRAPPER */
        else if (Matches("CREATE", "FOREIGN", "DATA", "WRAPPER", MatchAny))
-               COMPLETE_WITH("HANDLER", "VALIDATOR", "OPTIONS");
+               COMPLETE_WITH("CONNECTION", "HANDLER", "OPTIONS", "VALIDATOR");
 
        /* CREATE FOREIGN TABLE */
        else if (Matches("CREATE", "FOREIGN", "TABLE", MatchAny))
@@ -3925,7 +3927,9 @@ match_previous_words(int pattern_id,
 
 /* CREATE SUBSCRIPTION */
        else if (Matches("CREATE", "SUBSCRIPTION", MatchAny))
-               COMPLETE_WITH("SERVER", "CONNECTION");
+               COMPLETE_WITH("CONNECTION", "SERVER");
+       else if (Matches("CREATE", "SUBSCRIPTION", MatchAny, "SERVER"))
+               COMPLETE_WITH_QUERY(Query_for_list_of_servers);
        else if (Matches("CREATE", "SUBSCRIPTION", MatchAny, "SERVER", MatchAny))
                COMPLETE_WITH("PUBLICATION");
        else if (Matches("CREATE", "SUBSCRIPTION", MatchAny, "CONNECTION", MatchAny))