summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier2021-11-05 06:25:36 +0000
committerMichael Paquier2021-11-05 06:25:36 +0000
commita5b336b8b9e04a93e7c8526302504d2e5201eb80 (patch)
tree39a238142508d0d709f3e0599ed47f4bccab518d
parente7428a99a13f973549aab30c57ec8380ddda1869 (diff)
Improve psql tab completion for COMMENT
Completion is added for more object types, like domain constraints, text search-ish objects or policies. Moreover, the area is reorganized, changing the list of objects supported by COMMENT to be in the same order as the documentation to ease future additions. Author: Ken Kato Reviewed-by: Fujii Masao, Shinya Kato, Suraj Khamkar, Michael Paquier Discussion: https://postgr.es/m/[email protected]
-rw-r--r--src/bin/psql/tab-complete.c85
1 files changed, 67 insertions, 18 deletions
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 8e01f545003..4f724e4428b 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -2411,22 +2411,19 @@ psql_completion(const char *text, int start, int end)
else if (Matches("COMMENT"))
COMPLETE_WITH("ON");
else if (Matches("COMMENT", "ON"))
- COMPLETE_WITH("ACCESS METHOD", "CAST", "COLLATION", "CONVERSION",
- "DATABASE", "EVENT TRIGGER", "EXTENSION",
- "FOREIGN DATA WRAPPER", "FOREIGN TABLE", "SERVER",
- "INDEX", "LANGUAGE", "POLICY", "PUBLICATION", "RULE",
- "SCHEMA", "SEQUENCE", "STATISTICS", "SUBSCRIPTION",
- "TABLE", "TYPE", "VIEW", "MATERIALIZED VIEW",
- "COLUMN", "AGGREGATE", "FUNCTION",
- "PROCEDURE", "ROUTINE",
- "OPERATOR", "TRIGGER", "CONSTRAINT", "DOMAIN",
- "LARGE OBJECT", "TABLESPACE", "TEXT SEARCH", "ROLE");
+ COMPLETE_WITH("ACCESS METHOD", "AGGREGATE", "CAST", "COLLATION",
+ "COLUMN", "CONSTRAINT", "CONVERSION", "DATABASE",
+ "DOMAIN", "EXTENSION", "EVENT TRIGGER",
+ "FOREIGN DATA WRAPPER", "FOREIGN TABLE",
+ "FUNCTION", "INDEX", "LANGUAGE", "LARGE OBJECT",
+ "MATERIALIZED VIEW", "OPERATOR", "POLICY",
+ "PROCEDURE", "PROCEDURAL LANGUAGE", "PUBLICATION", "ROLE",
+ "ROUTINE", "RULE", "SCHEMA", "SEQUENCE", "SERVER",
+ "STATISTICS", "SUBSCRIPTION", "TABLE",
+ "TABLESPACE", "TEXT SEARCH", "TRANSFORM FOR",
+ "TRIGGER", "TYPE", "VIEW");
else if (Matches("COMMENT", "ON", "ACCESS", "METHOD"))
COMPLETE_WITH_QUERY(Query_for_list_of_access_methods);
- else if (Matches("COMMENT", "ON", "FOREIGN"))
- COMPLETE_WITH("DATA WRAPPER", "TABLE");
- else if (Matches("COMMENT", "ON", "TEXT", "SEARCH"))
- COMPLETE_WITH("CONFIGURATION", "DICTIONARY", "PARSER", "TEMPLATE");
else if (Matches("COMMENT", "ON", "CONSTRAINT"))
COMPLETE_WITH_QUERY(Query_for_all_table_constraints);
else if (Matches("COMMENT", "ON", "CONSTRAINT", MatchAny))
@@ -2434,15 +2431,67 @@ psql_completion(const char *text, int start, int end)
else if (Matches("COMMENT", "ON", "CONSTRAINT", MatchAny, "ON"))
{
completion_info_charp = prev2_wd;
- COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_constraint);
+ COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_constraint
+ " UNION SELECT 'DOMAIN'");
}
- else if (Matches("COMMENT", "ON", "MATERIALIZED", "VIEW"))
- COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews, NULL);
+ else if (Matches("COMMENT", "ON", "CONSTRAINT", MatchAny, "ON", "DOMAIN"))
+ COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_domains, NULL);
else if (Matches("COMMENT", "ON", "EVENT", "TRIGGER"))
COMPLETE_WITH_QUERY(Query_for_list_of_event_triggers);
+ else if (Matches("COMMENT", "ON", "FOREIGN"))
+ COMPLETE_WITH("DATA WRAPPER", "TABLE");
+ else if (Matches("COMMENT", "ON", "FOREIGN", "TABLE"))
+ COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_foreign_tables, NULL);
+ else if (Matches("COMMENT", "ON", "MATERIALIZED", "VIEW"))
+ COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews, NULL);
+ else if (Matches("COMMENT", "ON", "POLICY"))
+ COMPLETE_WITH_QUERY(Query_for_list_of_policies);
+ else if (Matches("COMMENT", "ON", "POLICY", MatchAny))
+ COMPLETE_WITH("ON");
+ else if (Matches("COMMENT", "ON", "POLICY", MatchAny, "ON"))
+ {
+ completion_info_charp = prev2_wd;
+ COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_policy);
+ }
+ else if (Matches("COMMENT", "ON", "PROCEDURAL", "LANGUAGE"))
+ COMPLETE_WITH_QUERY(Query_for_list_of_languages);
+ else if (Matches("COMMENT", "ON", "RULE", MatchAny))
+ COMPLETE_WITH("ON");
+ else if (Matches("COMMENT", "ON", "RULE", MatchAny, "ON"))
+ {
+ completion_info_charp = prev2_wd;
+ COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_rule);
+ }
+ else if (Matches("COMMENT", "ON", "TEXT", "SEARCH"))
+ COMPLETE_WITH("CONFIGURATION", "DICTIONARY", "PARSER", "TEMPLATE");
+ else if (Matches("COMMENT", "ON", "TEXT", "SEARCH", "CONFIGURATION"))
+ COMPLETE_WITH_QUERY(Query_for_list_of_ts_configurations);
+ else if (Matches("COMMENT", "ON", "TEXT", "SEARCH", "DICTIONARY"))
+ COMPLETE_WITH_QUERY(Query_for_list_of_ts_dictionaries);
+ else if (Matches("COMMENT", "ON", "TEXT", "SEARCH", "PARSER"))
+ COMPLETE_WITH_QUERY(Query_for_list_of_ts_parsers);
+ else if (Matches("COMMENT", "ON", "TEXT", "SEARCH", "TEMPLATE"))
+ COMPLETE_WITH_QUERY(Query_for_list_of_ts_templates);
+ else if (Matches("COMMENT", "ON", "TRANSFORM", "FOR"))
+ COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes, NULL);
+ else if (Matches("COMMENT", "ON", "TRANSFORM", "FOR", MatchAny))
+ COMPLETE_WITH("LANGUAGE");
+ else if (Matches("COMMENT", "ON", "TRANSFORM", "FOR", MatchAny, "LANGUAGE"))
+ {
+ completion_info_charp = prev2_wd;
+ COMPLETE_WITH_QUERY(Query_for_list_of_languages);
+ }
+ else if (Matches("COMMENT", "ON", "TRIGGER", MatchAny))
+ COMPLETE_WITH("ON");
+ else if (Matches("COMMENT", "ON", "TRIGGER", MatchAny, "ON"))
+ {
+ completion_info_charp = prev2_wd;
+ COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_trigger);
+ }
else if (Matches("COMMENT", "ON", MatchAny, MatchAnyExcept("IS")) ||
Matches("COMMENT", "ON", MatchAny, MatchAny, MatchAnyExcept("IS")) ||
- Matches("COMMENT", "ON", MatchAny, MatchAny, MatchAny, MatchAnyExcept("IS")))
+ Matches("COMMENT", "ON", MatchAny, MatchAny, MatchAny, MatchAnyExcept("IS")) ||
+ Matches("COMMENT", "ON", MatchAny, MatchAny, MatchAny, MatchAny, MatchAnyExcept("IS")))
COMPLETE_WITH("IS");
/* COPY */