pg.ddx.io pgsql-hackers@postgresql.org mailing list archive
help / color / mirror / Atom feed From: Ken Kato <katouknl@oss.nttdata.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: pgsql-hackers@lists.postgresql.org
Subject: Re: CREATE tab completion
Date: Thu, 18 Nov 2021 16:25:30 +0900
Message-ID: <1e16d01ba570efea94d6d82e4254dc88@oss.nttdata.com> (raw )
In-Reply-To: <YZSv1Ydpfgu+n1Qf@paquier.xyz >
References: <8d370135aef066659eef8e8fbfa6315b@oss.nttdata.com >
<YZSv1Ydpfgu+n1Qf@paquier.xyz >
> + else if (Matches("CREATE", "TRANSFORM", "FOR", MatchAny)
> + COMPLETE_WITH("LANGUAGE")
> + else if (Matches("CREATE", "TRANSFORM", "FOR", MatchAny,
> "LANGUAGE")
>
> Those three lines are wrong, for two different reasons and three
> mistakes. You may want to compile your code before sending it :)
>
> + COMPLETE_WITH_QUERY(Query_for_list_of_schemas
> + " UNION SELECT
> 'AUTORIZATION'");
> Incorrect completion here, s/AUTORIZATION/AUTHORIZATION/.
Thank you for the comments.
I am sorry for the compile error and a typo. I will make sure to compile
before sending it and double check typos.
> "CREATE [TEMP|TEMPORARY] SEQUENCE name AS" could be completed with the
> supported types. There are three of them.
For this part, I did the following:
+ else if (TailMatches("CREATE", "SEQUENCE", MatchAny, "AS") ||
+ TailMatches("CREATE", "TEMP|TEMPORARY", "SEQUENCE", MatchAny,
"AS"))
+ COMPLETE_WITH("smallint", "integer", "bigint");
Am I doing this right? or Are there better ways to do it?
Best wishes,
--
Ken Kato
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION
Attachments:
create_tab_completion.patch (text/x-diff, 5.0K) download
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");
view thread (8+ messages) latest in thread
Message-ID: <1e16d01ba570efea94d6d82e4254dc88@oss.nttdata.com>
Permalink: ../1e16d01ba570efea94d6d82e4254dc88@oss.nttdata.com/
Also on: postgresql.org/message-id/1e16d01ba570efea94d6d82e4254dc88@oss.nttdata.com
copy link · copy postgr.es · copy git am
reply Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: katouknl@oss.nttdata.com, michael@paquier.xyz, pgsql-hackers@lists.postgresql.org
Subject: Re: CREATE tab completion
In-Reply-To: <1e16d01ba570efea94d6d82e4254dc88@oss.nttdata.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox