From 2ff5ca86e816846743b31279a9f6b819d4cf4b11 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 12 Jan 2023 08:49:37 +0900 Subject: [PATCH] Add support for tab completion after ALTER EXTENSION ADD|DROP in psql 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 | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 23750ea5fb..5e1882eaea 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -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 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 ADD|DROP FOREIGN */ + else if (Matches("ALTER", "EXTENSION", MatchAny, "ADD|DROP", "FOREIGN")) + COMPLETE_WITH("DATA WRAPPER", "TABLE"); + + /* ALTER EXTENSION ADD|DROP OPERATOR */ + else if (Matches("ALTER", "EXTENSION", MatchAny, "ADD|DROP", "OPERATOR")) + COMPLETE_WITH("CLASS", "FAMILY"); + + /* ALTER EXTENSION ADD|DROP TEXT SEARCH */ + else if (Matches("ALTER", "EXTENSION", MatchAny, "ADD|DROP", "TEXT", "SEARCH")) + COMPLETE_WITH("CONFIGURATION", "DICTIONARY", "PARSER", "TEMPLATE"); + /* ALTER EXTENSION UPDATE */ else if (Matches("ALTER", "EXTENSION", MatchAny, "UPDATE")) COMPLETE_WITH("TO");