2016-09-16 10:31 GMT+02:00 Kyotaro HORIGUCHI < horiguchi.kyot...@lab.ntt.co.jp>:
> Hello, this is the new version. > > At Tue, 13 Sep 2016 10:50:13 +0900 (Tokyo Standard Time), Kyotaro > HORIGUCHI <horiguchi.kyot...@lab.ntt.co.jp> wrote in < > 20160913.105013.65452566.horiguchi.kyot...@lab.ntt.co.jp> > > > > This patch consists of the following files. Since these files are > > > > splitted in strange criteria and order for historical reasons, > > > > I'll reorganize this and post them later. > > The focus of this patch has changed. The first motivation was > completing IF-EXISTS but the underlying issue was flexibility of > psql_completion. And as Pavel's suggestion, keywords suggested > along with database objects should follow the character case of > input. > > For the purpose of resolving the issues, I reorganized the > confused patch set. The attached patches are organized as the > following. > > 1. Refactoring tab-complete to make psql_completion code > > Does two things. One is moving out the macros that has grown to > be too large to stay in tab_completion.c to new file > tab-complete-macros.h The other is separating out the else-if > sequence in psql_completion() as a new function > psql_completion_internal(). This allows us to the following > things. > > - Exit from arbitrary place in the former-else-if sequence just > by return. > > - Do other than "if(matching) { completion }" in anywhere > convenient in the midst of the former-els... > > - Recursively matching for sub syntaxes. EXPLAIN, RULE and > others are using this feature. (Needs the 4th patch to do > this, though) > > This first patch looks well - although it is big patch - it doesn't do any not trivial work. No problems with a patching or compilation. I didn't find any issue. Regards Pavel > 2. Make keywords' case follow to input > > Allow the keywords suggested along with databse objects to > follow the input letter case. The core part of this patch is a > new function additional_kw_query(), which dynamically generates > additional query string with specified keywords in the desired > letter case. COMPLETE_WITH_* macros are modified to accept the > function. > > 3. Fix suggested keywords to follow input in tab-completion session 2 > > The 2nd patch above leaves some query string containing static > keyword strings, which results in failure to follow input > letter cases. Most of them are naturally removed but role names > are a bother. This patch puts additional query strings for > several usage of roles but it might be overdone. > > 4. Introduce word shift and removal feature to psql-completion > > This is the second core for the flexibility of completion code. > The word shift feature is the ability to omit first several > words in *MatchesN macros. For example this allows complete > create-schema's schema elements in a natural code. (Currently > those syntaxes that can be a schema elements are using > TailMatches instead of Matches, as the result HeadMatches are > not available there). The words removing feature is the ability > to (desructively) clip multiple suceessive words in the > previous_words list. This feature allows suceeding completion > code not to care about the removed words, such like UNIQUE, > CONCURRENTLY, VERBOSE and so on. > > 5. Add suggestion for IF (NOT) EXISTS for some syntaxes > > This adds IF (NOT) EXISTS suggestion, as a PoC. This patch no > loger covers all adoptable syntaces since the places where more > than boilerplating is required are omitted. > > regards, > > -- > Kyotaro Horiguchi > NTT Open Source Software Center > > > > >