On Wed, 21 Sept 2022 at 10:55, Fujii Masao <masao.fujii@oss.nttdata.com> wrote:
>
>
>
> On 2022/09/21 0:51, Alvaro Herrera wrote:
> > The rules starting at line 4111 make me a bit nervous, since nowhere
> > we're restricting them to operating only on MERGE lines. I don't think
> > it's a real problem since USING is not terribly common anyway. Likewise
> > for the ones with WHEN [NOT] MATCHED. I kinda wish we had a way to
> > search for stuff like "keyword MERGE appears earlier in the command",
> > but we don't have that.
>
> Yeah, I was thinking the same when updating the patch.
>
> How about adding something like PartialMatches() that checks whether
> the keywords are included in the input string or not? If so, we can restrict
> some tab-completion rules to operating only on MERGE, as follows. I attached
> the WIP patch (0002 patch) that introduces PartialMatches().
> Is this approach over-complicated? Thought?
>
> + else if (PartialMatches("MERGE", "INTO", MatchAny, "USING") ||
> + PartialMatches("MERGE", "INTO", MatchAny, "AS", MatchAny, "USING") ||
> + PartialMatches("MERGE", "INTO", MatchAny, MatchAny, "USING"))
> + {
> + /* Complete MERGE INTO ... ON with target table attributes */
> + if (TailMatches("INTO", MatchAny, "USING", MatchAny, "ON"))
> + COMPLETE_WITH_ATTR(prev4_wd);
> + else if (TailMatches("INTO", MatchAny, "AS", MatchAny, "USING", MatchAny, "AS", MatchAny, "ON"))
> + COMPLETE_WITH_ATTR(prev8_wd);
> + else if (TailMatches("INTO", MatchAny, MatchAny, "USING", MatchAny, MatchAny, "ON"))
> + COMPLETE_WITH_ATTR(prev6_wd);
The patch does not apply on top of HEAD as in [1], please post a rebased patch:
=== Applying patches on top of PostgreSQL commit ID
e351f85418313e97c203c73181757a007dfda6d0 ===
=== applying patch ./v9-0001-psql-Improve-tab-completion-for-MERGE.patch
patching file src/bin/psql/tab-complete.c
Hunk #1 FAILED at 1669.
Hunk #2 FAILED at 3641.
Hunk #3 FAILED at 3660.
Hunk #4 FAILED at 4065.
4 out of 4 hunks FAILED -- saving rejects to file
src/bin/psql/tab-complete.c.rej
[1] - http://cfbot.cputube.org/patch_41_3890.log
Regards,
Vignesh