Hi, Pavel.

At Tue, 29 Mar 2016 09:59:01 +0200, Pavel Stehule <pavel.steh...@gmail.com> 
wrote in <cafj8prdepggymz2axgtl33pud7x+xieao++wa+v9nqpqiyd...@mail.gmail.com>
> > > On 3/18/16 3:22 AM, Pavel Stehule wrote:
> > >
> > > >     I am looking this patch. It looks well, but this feature doesn't
> > > >     respect upper or lower chars. It enforce upper chars. This is not
> > > >     consistent with any other autocomplete.
> >
> > As mentioned before, upper-lower problem is an existing
> > issue. The case of the words in a query result list cannot be
> > edited since it may contain words that should not be changed,
> > such as relation names. So we can address it only before issueing
> > a query but I haven't found simple way to do it.
> >
> 
> This is unpleasant. I am sorry. I had very uncomfortable feeling from this
> behave. I am thinking so it should be solvable - you have to convert only
> keyword IF EXISTS or IF NOT EXISTS. Maybe there are not trivial solution,
> but this should be fixed.

I understand that and feel the same. But I don't want to put
puzzling code. Defining a macro enable this by writing as the
following.

>    else if (Matches2("ALTER", "TABLE"))
>        COMPLETE_WITH_SCHEMA_QUERY(
>            Query_for_list_of_tables,
>            ADDLIST("",
>                    "('IF EXISTS'), ('ALL IN TABLESPACE')",
>                    "('if exists'), ('all in tablespace')"));
...
>     else if (Matches2("ALTER", "POLICY"))
>         COMPLETE_WITH_QUERY(
>             ADDLIST(Query_for_list_of_policies,
>                     "('IF EXISTS')", "('if exists')"));

This will work as you expects but it looks quite redundant, but
avoiding dynamic string (and/or malloc) operation would lead to
the similar results. Integrating the ADDLIST into
COMPLETE... might make the situation better.

The attached patch does it only for "ALTER TABLE" and "ALTER
POLICY".

> > > > I checked it against sql help and these statements doesn't work
> >
> > Thank you very much.
> >
> > > > alter foreign table hhhh drop column
> > > > drop cast
> > > > drop operator
> > > > drop transform -- missing autocomplete completely
> >
> > These are not done. Each of them has issues to be addressed
> > before adding completion of IF EXISTS.
> >
> > > > alter text search configuration jjj drop mapping
> > > > alter type hhh drop attribute
> > > > drop extension
> >
> > Done.
> >
> > > > drop text search
> >
> > I don't see the syntax "drop text search [if exists]".  drop text
> > search (configuration|dictionary|parser|template) are already
> > addressed.
> >
> 
> ok, probably my mistake. I am sorry.
> 
> 
> >
> > > > drop user mapping
> >
> > "drop user" was not completed with "mapping". I added it then
> > addressed this. (This might be another issue.)
> >
> > > > alter table jjj add column
> >
> > Done if it is mentioning DROP COLUMN. But new two macros
> > HeadMatches6 and 7 are introduced together.
> >
> > > > create temp sequence
> > > > create sequence
> >
> > DROP SEQUENCE is already completed with IF EXISTS. CREATE [TEMP]
> > SEQUENCE with IF NOT EXISTS is added.
> >
> > > Do you have an idea of when you will have a new patch ready?
> >
> > Sorry to to have been late. The attached is the revised version.
> >
> 
> I'll check it today.

Thanks.

regards,

-- 
Kyotaro Horiguchi
NTT Open Source Software Center
>From c2e2469a72cbbd078a2fa3f300716f6e4b2ebc81 Mon Sep 17 00:00:00 2001
From: Kyotaro Horiguchi <horiguchi.kyot...@lab.ntt.co.jp>
Date: Tue, 29 Mar 2016 19:01:13 +0900
Subject: [PATCH] Sample implement of case-sensitive additional list.

---
 src/bin/psql/tab-complete.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 73c5601..5d102d7 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -312,6 +312,10 @@ do { \
 	COMPLETE_WITH_LIST_CS(list); \
 } while (0)
 
+#define CHOOSE_CASE(b, e, u, l) (l && islower(text[0]) ? b l e : b u e)
+#define ADDLIST(q, u, l) \
+	CHOOSE_CASE(q "UNION SELECT * FROM (VALUES ", ") as x", u, l)
+
 /*
  * Assembly instructions for schema queries
  */
@@ -1437,9 +1441,12 @@ psql_completion(const char *text, int start, int end)
 
 	/* ALTER TABLE */
 	else if (Matches2("ALTER", "TABLE"))
-		COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables,
-								   "UNION SELECT 'IF EXISTS'"
-								   "UNION SELECT 'ALL IN TABLESPACE'");
+		COMPLETE_WITH_SCHEMA_QUERY(
+			Query_for_list_of_tables,
+			ADDLIST("",
+					"('IF EXISTS'), ('ALL IN TABLESPACE')",
+					"('if exists'), ('all in tablespace')"));
+
 	/* Try ALTER TABLE after removing optional words IF EXISTS*/
 	else if (HeadMatches2("ALTER", "TABLE") &&
 			 MidMatchAndRemove2(2, "IF", "EXISTS") &&
@@ -1726,8 +1733,9 @@ psql_completion(const char *text, int start, int end)
 
 	/* ALTER POLICY */
 	else if (Matches2("ALTER", "POLICY"))
-		COMPLETE_WITH_QUERY(Query_for_list_of_policies
-							"UNION SELECT 'IF EXISTS'");
+		COMPLETE_WITH_QUERY(
+			ADDLIST(Query_for_list_of_policies,
+					"('IF EXISTS')", "('if exists')"));
 	/* Try ALTER POLICY after removing optional words IF EXISTS */
 	else if (HeadMatches2("ALTER", "POLICY") &&
 			 MidMatchAndRemove2(2, "IF", "EXISTS") &&
-- 
1.8.3.1

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to