Add support for tab completion after ALTER EXTENSION ADD|DROP in psql
authorMichael Paquier <michael@paquier.xyz>
Wed, 11 Jan 2023 23:49:37 +0000 (08:49 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 11 Jan 2023 23:49:37 +0000 (08:49 +0900)
This appends the set of object types supported by these commands, and
the objects defined in the cluster are completed after that.  Note that
these may not be in the extension being working on when using DROP, to
keep the code simple, but this is much more useful than the previous
behavior of not knowing the objects that can be touched.

Author: Vignesh C
Discussion: https://postgr.es/m/CALDaNm3LVM2QcUWqgOonKZH80TveT-tUthbw4ZhuE_6pD3yi-A@mail.gmail.com

src/bin/psql/tab-complete.c

index 23750ea5fbdfdef9e058fbafca2dd3799f0f4d89..5e1882eaeabd54e02a463337d1d912788df3ec45 100644 (file)
@@ -1982,6 +1982,27 @@ psql_completion(const char *text, int start, int end)
    else if (Matches("ALTER", "EXTENSION", MatchAny))
        COMPLETE_WITH("ADD", "DROP", "UPDATE", "SET SCHEMA");
 
+   /* ALTER EXTENSION <name> ADD|DROP */
+   else if (Matches("ALTER", "EXTENSION", MatchAny, "ADD|DROP"))
+       COMPLETE_WITH("ACCESS METHOD", "AGGREGATE", "CAST", "COLLATION",
+                     "CONVERSION", "DOMAIN", "EVENT TRIGGER", "FOREIGN",
+                     "FUNCTION", "MATERIALIZED VIEW", "OPERATOR",
+                     "LANGUAGE", "PROCEDURE", "ROUTINE", "SCHEMA",
+                     "SEQUENCE", "SERVER", "TABLE", "TEXT SEARCH",
+                     "TRANSFORM FOR", "TYPE", "VIEW");
+
+   /* ALTER EXTENSION <name> ADD|DROP FOREIGN */
+   else if (Matches("ALTER", "EXTENSION", MatchAny, "ADD|DROP", "FOREIGN"))
+       COMPLETE_WITH("DATA WRAPPER", "TABLE");
+
+   /* ALTER EXTENSION <name> ADD|DROP OPERATOR */
+   else if (Matches("ALTER", "EXTENSION", MatchAny, "ADD|DROP", "OPERATOR"))
+       COMPLETE_WITH("CLASS", "FAMILY");
+
+   /* ALTER EXTENSION <name> ADD|DROP TEXT SEARCH */
+   else if (Matches("ALTER", "EXTENSION", MatchAny, "ADD|DROP", "TEXT", "SEARCH"))
+       COMPLETE_WITH("CONFIGURATION", "DICTIONARY", "PARSER", "TEMPLATE");
+
    /* ALTER EXTENSION <name> UPDATE */
    else if (Matches("ALTER", "EXTENSION", MatchAny, "UPDATE"))
        COMPLETE_WITH("TO");