Hi hackers,
I noticed that there are some tab completions missing for the following
commands:
-ALTER DEFAULT PRIVILEGES: missing FOR USER
-ALTER FOREIGN DATA WRAPPER: missing NO HANDLER, NO VALIDATOR
-ALTER SEQUENCE: missing AS
-ALTER VIEW: no completion after ALTER COLUMN column_name
-ALTER TRANSFORM: no doc for ALTER TRANSFORM, so I excluded TRANSFORM
from ALTER tab completion
I made a patch for this, so please have a look.
Best wishes,
--
Ken Kato
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 4f724e4428..60bbd18ade 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -1088,7 +1088,7 @@ static const pgsql_thing_t words_after_create[] = {
{"TEMPORARY", NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER}, /* for CREATE TEMPORARY
* TABLE ... */
{"TEXT SEARCH", NULL, NULL, NULL},
- {"TRANSFORM", NULL, NULL, NULL},
+ {"TRANSFORM", NULL, NULL, NULL, THING_NO_ALTER},
{"TRIGGER", "SELECT pg_catalog.quote_ident(tgname) FROM pg_catalog.pg_trigger WHERE substring(pg_catalog.quote_ident(tgname),1,%d)='%s' AND NOT tgisinternal"},
{"TYPE", NULL, NULL, &Query_for_list_of_datatypes},
{"UNIQUE", NULL, NULL, NULL, THING_NO_DROP | THING_NO_ALTER}, /* for CREATE UNIQUE
@@ -1754,7 +1754,10 @@ psql_completion(const char *text, int start, int end)
/* ALTER FOREIGN DATA WRAPPER <name> */
else if (Matches("ALTER", "FOREIGN", "DATA", "WRAPPER", MatchAny))
- COMPLETE_WITH("HANDLER", "VALIDATOR", "OPTIONS", "OWNER TO", "RENAME TO");
+ COMPLETE_WITH("HANDLER", "VALIDATOR", "NO",
+ "OPTIONS", "OWNER TO", "RENAME TO");
+ else if (Matches("ALTER", "FOREIGN", "DATA", "WRAPPER", MatchAny, "NO"))
+ COMPLETE_WITH("HANDLER", "VALIDATOR");
/* ALTER FOREIGN TABLE <name> */
else if (Matches("ALTER", "FOREIGN", "TABLE", MatchAny))
@@ -1856,10 +1859,10 @@ psql_completion(const char *text, int start, int end)
/* ALTER DEFAULT PRIVILEGES */
else if (Matches("ALTER", "DEFAULT", "PRIVILEGES"))
- COMPLETE_WITH("FOR ROLE", "IN SCHEMA");
+ COMPLETE_WITH("FOR ROLE", "FOR USER", "IN SCHEMA");
/* ALTER DEFAULT PRIVILEGES FOR */
else if (Matches("ALTER", "DEFAULT", "PRIVILEGES", "FOR"))
- COMPLETE_WITH("ROLE");
+ COMPLETE_WITH("ROLE", "USER");
/* ALTER DEFAULT PRIVILEGES IN */
else if (Matches("ALTER", "DEFAULT", "PRIVILEGES", "IN"))
COMPLETE_WITH("SCHEMA");
@@ -1907,9 +1910,12 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH("DEFAULT", "NOT NULL", "SCHEMA");
/* ALTER SEQUENCE <name> */
else if (Matches("ALTER", "SEQUENCE", MatchAny))
- COMPLETE_WITH("INCREMENT", "MINVALUE", "MAXVALUE", "RESTART", "NO",
- "CACHE", "CYCLE", "SET SCHEMA", "OWNED BY", "OWNER TO",
- "RENAME TO");
+ COMPLETE_WITH("AS", "INCREMENT", "MINVALUE", "MAXVALUE", "RESTART",
+ "NO", "CACHE", "CYCLE", "SET SCHEMA", "OWNED BY",
+ "OWNER TO", "RENAME TO");
+ /* ALTER SEQUENCE <name> AS */
+ else if (TailMatches("ALTER", "SEQUENCE", MatchAny, "AS"))
+ COMPLETE_WITH("smallint", "integer", "bigint");
/* ALTER SEQUENCE <name> NO */
else if (Matches("ALTER", "SEQUENCE", MatchAny, "NO"))
COMPLETE_WITH("MINVALUE", "MAXVALUE", "CYCLE");
@@ -1938,9 +1944,15 @@ psql_completion(const char *text, int start, int end)
/* ALTER VIEW xxx RENAME yyy */
else if (Matches("ALTER", "VIEW", MatchAny, "RENAME", MatchAnyExcept("TO")))
COMPLETE_WITH("TO");
+ /* ALTER VIEW xxx ALTER yyy */
+ else if (Matches("ALTER", "VIEW", MatchAny, "ALTER", MatchAny))
+ COMPLETE_WITH("SET DEFAULT", "DROP DEFAULT");
/* ALTER VIEW xxx RENAME COLUMN yyy */
else if (Matches("ALTER", "VIEW", MatchAny, "RENAME", "COLUMN", MatchAnyExcept("TO")))
COMPLETE_WITH("TO");
+ /* ALTER VIEw xxx ALTER COLUMN yyy */
+ else if (Matches("ALTER", "VIEW", MatchAny, "ALTER", "COLUMN", MatchAny))
+ COMPLETE_WITH("SET DEFAULT", "DROP DEFAULT");
/* ALTER MATERIALIZED VIEW <name> */
else if (Matches("ALTER", "MATERIALIZED", "VIEW", MatchAny))