From: ilmari@ilmari.org
To: Artur Zakirov <a.zakirov@postgrespro.ru>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Subject: Re: Re: [PATCH] Tab completion for ALTER TYPE … RENAME VALUE …
Date: Tue, 08 Nov 2016 13:53:26 +0000
Message-ID: <d8jvavynkmh.fsf@dalvik.ping.uio.no> (raw)
In-Reply-To: <CAKNkYnw8wVX5htytcQ8LGOuYY4kBbq7F4L5qsDOMkH6jm6-SsQ@mail.gmail.com>
References: <d8j4m5lz7al.fsf@dalvik.ping.uio.no>
<d8jzindxnp7.fsf@dalvik.ping.uio.no>
<CAKNkYnw8wVX5htytcQ8LGOuYY4kBbq7F4L5qsDOMkH6jm6-SsQ@mail.gmail.com>
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
Artur Zakirov <a.zakirov@postgrespro.ru> writes:
> Hello,
Hi Artur,
> 2016-09-12 16:16 GMT+03:00 Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>:
>>
>> I've added it to the 2016-11 commit fest:
>> https://commitfest.postgresql.org/11/795/
>>
>> - ilmari
>
> I've tested your patch.
[...]
> It seems that the patch can be commited without any fixes. So I marked
> it as "Ready for Committer".
Thank you very much. I just looked at the patch again and realised the
completion of "TO" after RENAME VALUE <name> can be merged with the one
for RENAME ATTRIBUTE <name>. Attached is an updated and patch, which
only differs from the previous one as follows:
$ interdiff 0001-Add-psql-tab-completion-for-ALTER-TYPE-RENAME-VALUE{,-v2}.patch
diff -u b/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
--- b/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -1918,11 +1918,8 @@ psql_completion(const char *text, int start, int end)
/* ALTER TYPE <foo> RENAME */
else if (Matches4("ALTER", "TYPE", MatchAny, "RENAME"))
COMPLETE_WITH_LIST3("ATTRIBUTE", "TO", "VALUE");
- /* ALTER TYPE xxx RENAME ATTRIBUTE yyy */
- else if (Matches6("ALTER", "TYPE", MatchAny, "RENAME", "ATTRIBUTE", MatchAny))
- COMPLETE_WITH_CONST("TO");
- /* ALTER TYPE xxx RENAME VALUE yyy */
- else if (Matches6("ALTER", "TYPE", MatchAny, "RENAME", "VALUE", MatchAny))
+ /* ALTER TYPE xxx RENAME (ATTRIBUTE|VALUE) yyy */
+ else if (Matches6("ALTER", "TYPE", MatchAny, "RENAME", "ATTRIBUTE|VALUE", MatchAny))
COMPLETE_WITH_CONST("TO");
/*
* If we have ALTER TYPE <sth> ALTER/DROP/RENAME ATTRIBUTE, provide list
--
- Twitter seems more influential [than blogs] in the 'gets reported in
the mainstream press' sense at least. - Matt McLeod
- That'd be because the content of a tweet is easier to condense down
to a mainstream media article. - Calle Dybedahl
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackersAttachments:
[text/x-diff] 0001-Add-psql-tab-completion-for-ALTER-TYPE-RENAME-VALUE-v2.patch (4.2K, ../d8jvavynkmh.fsf@dalvik.ping.uio.no/2-0001-Add-psql-tab-completion-for-ALTER-TYPE-RENAME-VALUE-v2.patch)
download | inline diff:
From d8454b66a544d91bf779ca3bfb38d18e4cd504f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <ilmari@ilmari.org>
Date: Mon, 12 Sep 2016 12:17:37 +0100
Subject: [PATCH] =?UTF-8?q?Add=20psql=20tab=20completion=20for=20ALTER=20T?=
=?UTF-8?q?YPE=20=E2=80=A6=20RENAME=20VALUE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Modelled on the completion for attributes, tweaked to return string
literals intead of identifiers.
---
src/bin/psql/tab-complete.c | 58 +++++++++++++++++++++++++++++++++++++++++----
1 file changed, 54 insertions(+), 4 deletions(-)
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.cindex a43bbc5..b556c00 100644--- a/src/bin/psql/tab-complete.c+++ b/src/bin/psql/tab-complete.c@@ -202,6 +202,31 @@ do { \
matches = completion_matches(text, complete_from_query); \
} while (0)
+#define COMPLETE_WITH_ENUM_VALUE(type) \+do { \+ char *_completion_schema; \+ char *_completion_type; \+\+ _completion_schema = strtokx(type, " \t\n\r", ".", "\"", 0, \+ false, false, pset.encoding); \+ (void) strtokx(NULL, " \t\n\r", ".", "\"", 0, \+ false, false, pset.encoding); \+ _completion_type = strtokx(NULL, " \t\n\r", ".", "\"", 0, \+ false, false, pset.encoding); \+ if (_completion_type == NULL)\+ { \+ completion_charp = Query_for_list_of_enum_values; \+ completion_info_charp = type; \+ } \+ else \+ { \+ completion_charp = Query_for_list_of_enum_values_with_schema; \+ completion_info_charp = _completion_type; \+ completion_info_charp2 = _completion_schema; \+ } \+ matches = completion_matches(text, complete_from_query); \+} while (0)+
#define COMPLETE_WITH_FUNCTION_ARG(function) \
do { \
char *_completion_schema; \
@@ -598,6 +623,26 @@ static const SchemaQuery Query_for_list_of_matviews = {
" AND (pg_catalog.quote_ident(nspname)='%s' "\
" OR '\"' || nspname || '\"' ='%s') "
+#define Query_for_list_of_enum_values \+"SELECT pg_catalog.quote_literal(enumlabel) "\+" FROM pg_catalog.pg_enum e, pg_catalog.pg_type t "\+" WHERE t.oid = e.enumtypid "\+" AND substring(pg_catalog.quote_literal(enumlabel),1,%d)='%s' "\+" AND (pg_catalog.quote_ident(typname)='%s' "\+" OR '\"' || typname || '\"'='%s') "\+" AND pg_catalog.pg_type_is_visible(t.oid)"++#define Query_for_list_of_enum_values_with_schema \+"SELECT pg_catalog.quote_literal(enumlabel) "\+" FROM pg_catalog.pg_enum e, pg_catalog.pg_type t, pg_catalog.pg_namespace n "\+" WHERE t.oid = e.enumtypid "\+" AND n.oid = t.typnamespace "\+" AND substring(pg_catalog.quote_literal(enumlabel),1,%d)='%s' "\+" AND (pg_catalog.quote_ident(typname)='%s' "\+" OR '\"' || typname || '\"'='%s') "\+" AND (pg_catalog.quote_ident(nspname)='%s' "\+" OR '\"' || nspname || '\"' ='%s') "+
#define Query_for_list_of_template_databases \
"SELECT pg_catalog.quote_ident(d.datname) "\
" FROM pg_catalog.pg_database d "\
@@ -1872,11 +1917,10 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH_LIST2("ATTRIBUTE", "VALUE");
/* ALTER TYPE <foo> RENAME */
else if (Matches4("ALTER", "TYPE", MatchAny, "RENAME"))
- COMPLETE_WITH_LIST2("ATTRIBUTE", "TO");- /* ALTER TYPE xxx RENAME ATTRIBUTE yyy */- else if (Matches6("ALTER", "TYPE", MatchAny, "RENAME", "ATTRIBUTE", MatchAny))+ COMPLETE_WITH_LIST3("ATTRIBUTE", "TO", "VALUE");+ /* ALTER TYPE xxx RENAME (ATTRIBUTE|VALUE) yyy */+ else if (Matches6("ALTER", "TYPE", MatchAny, "RENAME", "ATTRIBUTE|VALUE", MatchAny))
COMPLETE_WITH_CONST("TO");
-
/*
* If we have ALTER TYPE <sth> ALTER/DROP/RENAME ATTRIBUTE, provide list
* of attributes
@@ -1896,6 +1940,12 @@ psql_completion(const char *text, int start, int end)
else if (Matches5("ALTER", "GROUP", MatchAny, "ADD|DROP", "USER"))
COMPLETE_WITH_QUERY(Query_for_list_of_roles);
+ /*+ * If we have ALTER TYPE <sth> RENAME VALUE, provide list of enum values+ */+ else if (Matches5("ALTER", "TYPE", MatchAny, "RENAME", "VALUE"))+ COMPLETE_WITH_ENUM_VALUE(prev3_wd);+
/* BEGIN */
else if (Matches1("BEGIN"))
COMPLETE_WITH_LIST6("WORK", "TRANSACTION", "ISOLATION LEVEL", "READ", "DEFERRABLE", "NOT DEFERRABLE");
--
2.10.2
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: ilmari@ilmari.org, a.zakirov@postgrespro.ru
Subject: Re: Re: [PATCH] Tab completion for ALTER TYPE … RENAME VALUE …
In-Reply-To: <d8jvavynkmh.fsf@dalvik.ping.uio.no>
* 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