Re: proposal: psql autocomplete for casting
От | Kyotaro HORIGUCHI |
---|---|
Тема | Re: proposal: psql autocomplete for casting |
Дата | |
Msg-id | 20160303.200651.44894586.horiguchi.kyotaro@lab.ntt.co.jp обсуждение исходный текст |
Ответ на | proposal: psql autocomplete for casting (Pavel Stehule <pavel.stehule@gmail.com>) |
Ответы |
Re: proposal: psql autocomplete for casting
(Pavel Stehule <pavel.stehule@gmail.com>)
|
Список | pgsql-hackers |
Hello, I considered on this, At Thu, 3 Mar 2016 10:05:06 +0100, Pavel Stehule <pavel.stehule@gmail.com> wrote in <CAFj8pRDZ456OKbpV9jDJ_VCgTWprqxYu1kQp6z_Eu_WgNvs57Q@mail.gmail.com> > We have not autocomplete for casting introduced by symbol "::". A > implementation should not be hard. Completion needs a sequence of break characters between two succeeding words and the break characters cannot be a part of a word. If cast operators are allowed to be preceded by white space, the following diff gives maybe-desired behavior. === --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1322,6 +1322,8 @@ psql_completion(const char *text, int start, int end) else matches= complete_from_variables(text, ":", "", true); } + else if (text[0] == ':' && text[1] == ':') + COMPLETE_WITH_LIST3("::integer", "::text", "::date"); /* If no previous word, suggest one of the basic sqlcommands */ else if (previous_words_count == 0) === > =# select 123 ::<tab> > ::DATE ::INTEGER ::TEXT > =# select 123 ::T<tab> > =# select 123 ::TEXT It might not be instinctive but would be doable by making such a candidate list. ==== diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 5f27120..179c9f0 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1322,6 +1322,8 @@ psql_completion(const char *text, int start, int end) else matches= complete_from_variables(text, ":", "", true); } + else if (text[0] == ':' && text[1] == ':') + COMPLETE_WITH_QUERY("SELECT distinct('::' || typname) FROM pg_type where typname !~'^(pg)?_.*'"); /*If no previous word, suggest one of the basic sql commands */ else if (previous_words_count == 0) ==== > =# select 2314 ::t<tab> > ::t ::tinterval > ::table_constraints ::transforms > ::table_privileges ::trigger > ::tables ::triggered_update_columns > ::text ::triggers > ::tid ::tsm_handler > ::time ::tsquery > ::timestamp ::tsrange > ::time_stamp ::tstzrange > ::timestamptz ::tsvector > ::timetz ::txid_snapshot Does this make sense? regards, -- Kyotaro Horiguchi NTT Open Source Software Center
В списке pgsql-hackers по дате отправления: