On Tue, 18 Jun 2019 at 10:39, Tom Lane <t...@sss.pgh.pa.us> wrote:

> Tim Cross <theophil...@gmail.com> writes:
> > On Tue, 18 Jun 2019 at 09:34, Ken Tanzer <ken.tan...@gmail.com> wrote:
> >> Thanks Adrian, though I wasn't really seeking tips for column names.  I
> >> was instead trying to understand whether this particular tab expansion
> was
> >> intentional and considered useful, and if so what that usefulness was,
> >> because it's rather escaping me!
>
> > Have to say, I fid that behaviour unusual as well.
>
> I don't think it's intentional.  A look into tab-complete.c shows that it
> makes no attempt to offer completions beyond the "=" part of the syntax;
> so there's room for improvement there.  But then what is producing the
> "DEFAULT" completion?  After looking around a bit, I think it's
> accidentally matching the pattern for a GUC "set" command:
>
>     else if (TailMatches("SET", MatchAny, "TO|="))
>     {
>         /* special cased code for individual GUCs */
>         ...
>         else
>             COMPLETE_WITH("DEFAULT");
>     }
>
> So perhaps that needs to look more like this other place where somebody
> already noticed the conflict against UPDATE:
>
>     else if (TailMatches("SET|RESET") && !TailMatches("UPDATE", MatchAny,
> "SET"))
>         COMPLETE_WITH_QUERY(Query_for_list_of_set_vars);
>
> More generally, though, I'm inclined to think that offering DEFAULT
> and nothing else, which is what this code does if it doesn't recognize
> the "GUC name", is just ridiculous.  If the word after SET is not a known
> GUC name then we probably have misconstrued the context, as indeed is
> happening in your example; and in any case DEFAULT is about the least
> likely thing for somebody to be trying to enter here.  (They'd probably
> have selected RESET not SET if they were trying to do that.)
>
>                         regards, tom lane
>


Given that without adding a full blown sql parser in order to identify
legitimate candidates following a '=' in an update statement, my suggestion
would be to refine the rules so that no completion is attempted after the
=. Would rather have tab do nothing over tab replacing what I've already
typed with 'default'.

-- 
regards,

Tim

--
Tim Cross

Reply via email to