Re: IF (NOT) EXISTS in psql-completion - Mailing list pgsql-hackers
From | Kyotaro HORIGUCHI |
---|---|
Subject | Re: IF (NOT) EXISTS in psql-completion |
Date | |
Msg-id | 20160916.173130.236023646.horiguchi.kyotaro@lab.ntt.co.jp Whole thread Raw |
In response to | Re: IF (NOT) EXISTS in psql-completion (Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>) |
Responses |
Re: IF (NOT) EXISTS in psql-completion
Re: IF (NOT) EXISTS in psql-completion |
List | pgsql-hackers |
Hello, this is the new version. At Tue, 13 Sep 2016 10:50:13 +0900 (Tokyo Standard Time), Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> wrote in <20160913.105013.65452566.horiguchi.kyotaro@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.hThe 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) 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 isa new function additional_kw_query(), which dynamically generates additional query string with specified keywords in thedesired 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 inputletter cases. Most of them are naturally removed but role names are a bother. This patch puts additional query stringsfor 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 severalwords in *MatchesN macros. For example this allows complete create-schema's schema elements in a natural code. (Currentlythose syntaxes that can be a schema elements are using TailMatches instead of Matches, as the result HeadMatchesare not available there). The words removing feature is the ability to (desructively) clip multiple suceessivewords 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 wheremore than boilerplating is required are omitted. regards, -- Kyotaro Horiguchi NTT Open Source Software Center
pgsql-hackers by date: