create_tab_completion.patch
text/x-diff
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/bin/psql/tab-complete.c | 63 | 2 |
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 4f724e4428..efa7bb1f5f 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -2572,6 +2572,26 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH("true", "false");
}
+ /* CREATE CONVERSION */
+ else if (Matches("CREATE", "CONVERSION", MatchAny) ||
+ Matches("CREATE", "DEFAULT", "CONVERSION", MatchAny))
+ COMPLETE_WITH("FOR");
+ else if (Matches("CREATE", "CONVERSION", MatchAny, "FOR") ||
+ Matches("CREATE", "DEFAULT", "CONVERSION", MatchAny, "FOR"))
+ COMPLETE_WITH_QUERY(Query_for_list_of_encodings);
+ else if (Matches("CREATE", "CONVERSION", MatchAny, "FOR", MatchAny) ||
+ Matches("CREATE", "DEFAULT", "CONVERSION", MatchAny, "FOR", MatchAny))
+ COMPLETE_WITH("TO");
+ else if (Matches("CREATE", "CONVERSION", MatchAny, "FOR", MatchAny, "TO") ||
+ Matches("CREATE", "DEFAULT", "CONVERSION", MatchAny, "FOR", MatchAny, "TO"))
+ COMPLETE_WITH_QUERY(Query_for_list_of_encodings);
+ else if (Matches("CREATE", "CONVERSION", MatchAny, "FOR", MatchAny, "TO", MatchAny) ||
+ Matches("CREATE", "DEFAULT", "CONVERSION", MatchAny, "FOR", MatchAny, "TO", MatchAny))
+ COMPLETE_WITH("FROM");
+ else if (Matches("CREATE", "CONVERSION", MatchAny, "FOR", MatchAny, "TO", MatchAny, "FROM") ||
+ Matches("CREATE", "DEFAULT", "CONVERSION", MatchAny, "FOR", MatchAny, "TO", MatchAny, "FROM"))
+ COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions, NULL);
+
/* CREATE DATABASE */
else if (Matches("CREATE", "DATABASE", MatchAny))
COMPLETE_WITH("OWNER", "TEMPLATE", "ENCODING", "TABLESPACE",
@@ -2582,6 +2602,17 @@ psql_completion(const char *text, int start, int end)
else if (Matches("CREATE", "DATABASE", MatchAny, "TEMPLATE"))
COMPLETE_WITH_QUERY(Query_for_list_of_template_databases);
+ /* CREATE DOMAIN */
+ else if (Matches("CREATE", "DOMAIN", MatchAny))
+ COMPLETE_WITH("AS");
+ else if (Matches("CREATE", "DOMAIN", MatchAny, "AS"))
+ COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes, NULL);
+ else if (Matches("CREATE", "DOMAIN", MatchAny, "AS", MatchAny))
+ COMPLETE_WITH("COLLATE", "DEFAULT", "CONSTRAINT",
+ "NOT NULL", "NULL", "CHECK (");
+ else if (Matches("CREATE", "DOMAIN", MatchAny, "COLLATE"))
+ COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_collations, NULL);
+
/* CREATE EXTENSION */
/* Complete with available extensions rather than installed ones. */
else if (Matches("CREATE", "EXTENSION"))
@@ -2661,6 +2692,14 @@ psql_completion(const char *text, int start, int end)
!TailMatches("FOR", MatchAny, MatchAny, MatchAny))
COMPLETE_WITH("(");
+ /* CREATE LANGUAGE */
+ else if (Matches("CREATE", "LANGUAGE", MatchAny) ||
+ Matches("CREATE", "OR", "REPLACE", "LANGUAGE", MatchAny))
+ COMPLETE_WITH("HANDLER");
+ else if (Matches("CREATE", "LANGUAGE", MatchAny, "HANDLER", MatchAny) ||
+ Matches("CREATE", "OR", "REPLACE", "LANGUAGE", MatchAny, "HANDLER", MatchAny))
+ COMPLETE_WITH("INLINE", "VALIDATOR");
+
/* CREATE OR REPLACE */
else if (Matches("CREATE", "OR"))
COMPLETE_WITH("REPLACE");
@@ -2802,11 +2841,20 @@ psql_completion(const char *text, int start, int end)
else if (TailMatches("AS", "ON", "SELECT|UPDATE|INSERT|DELETE", "TO"))
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
+/* CREATE SCHEMA */
+ else if (Matches("CREATE", "SCHEMA"))
+ COMPLETE_WITH("AUTHORIZATION");
+ else if (Matches("CREATE", "SCHEMA") && TailMatches("AUTHORIZATION"))
+ COMPLETE_WITH_QUERY(Query_for_list_of_roles);
+
/* CREATE SEQUENCE --- is allowed inside CREATE SCHEMA, so use TailMatches */
else if (TailMatches("CREATE", "SEQUENCE", MatchAny) ||
TailMatches("CREATE", "TEMP|TEMPORARY", "SEQUENCE", MatchAny))
- COMPLETE_WITH("INCREMENT BY", "MINVALUE", "MAXVALUE", "NO", "CACHE",
- "CYCLE", "OWNED BY", "START WITH");
+ COMPLETE_WITH("AS", "INCREMENT BY", "MINVALUE", "MAXVALUE", "NO",
+ "CACHE", "CYCLE", "OWNED BY", "START WITH");
+ else if (TailMatches("CREATE", "SEQUENCE", MatchAny, "AS") ||
+ TailMatches("CREATE", "TEMP|TEMPORARY", "SEQUENCE", MatchAny, "AS"))
+ COMPLETE_WITH("smallint", "integer", "bigint");
else if (TailMatches("CREATE", "SEQUENCE", MatchAny, "NO") ||
TailMatches("CREATE", "TEMP|TEMPORARY", "SEQUENCE", MatchAny, "NO"))
COMPLETE_WITH("MINVALUE", "MAXVALUE", "CYCLE");
@@ -2882,6 +2930,19 @@ psql_completion(const char *text, int start, int end)
else if (Matches("CREATE", "TEXT", "SEARCH", "CONFIGURATION|DICTIONARY|PARSER|TEMPLATE", MatchAny))
COMPLETE_WITH("(");
+/* CREATE TRANSFORM */
+ else if (Matches("CREATE", "TRANSFORM"))
+ COMPLETE_WITH("FOR");
+ else if (Matches("CREATE", "TRANSFORM", "FOR"))
+ COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes, NULL);
+ else if (Matches("CREATE", "TRANSFORM", "FOR", MatchAny))
+ COMPLETE_WITH("LANGUAGE");
+ else if (Matches("CREATE", "TRANSFORM", "FOR", MatchAny, "LANGUAGE"))
+ {
+ completion_info_charp = prev2_wd;
+ COMPLETE_WITH_QUERY(Query_for_list_of_languages);
+ }
+
/* CREATE SUBSCRIPTION */
else if (Matches("CREATE", "SUBSCRIPTION", MatchAny))
COMPLETE_WITH("CONNECTION");