Re: MERGE ... WHEN NOT MATCHED BY SOURCE - Mailing list pgsql-hackers
From | vignesh C |
---|---|
Subject | Re: MERGE ... WHEN NOT MATCHED BY SOURCE |
Date | |
Msg-id | CALDaNm0vHhmOe3zbauuQn=LdBCv+AcQT-YwoPsZAc7Mj7VjCwQ@mail.gmail.com Whole thread Raw |
In response to | Re: MERGE ... WHEN NOT MATCHED BY SOURCE (Dean Rasheed <dean.a.rasheed@gmail.com>) |
Responses |
Re: MERGE ... WHEN NOT MATCHED BY SOURCE
|
List | pgsql-hackers |
On Sat, 1 Jul 2023 at 18:04, Dean Rasheed <dean.a.rasheed@gmail.com> wrote: > > On Tue, 21 Mar 2023 at 12:26, Alvaro Herrera <alvherre@alvh.no-ip.org> wrote: > > > > On 2023-Mar-21, Dean Rasheed wrote: > > > > > Looking at it with fresh eyes though, I realise that I could have just written > > > > > > action->qual = make_and_qual((Node *) ntest, action->qual); > > > > > > which is equivalent, but more concise. > > > > Nice. > > > > I have no further observations about this patch. > > > > Looking at this one afresh, it seems that the change to make Vars > outer-join aware broke it -- the Var in the qual to test whether the > source row is null needs to be marked as nullable by the join added by > transform_MERGE_to_join(). That's something that needs to be done in > transform_MERGE_to_join(), so it makes more sense to add the new qual > there rather than in transformMergeStmt(). > > Also, now that MERGE has ruleutils support, it's clear that adding the > qual in transformMergeStmt() isn't right anyway, since it would then > appear in the deparsed output. > > So attached is an updated patch doing that, which seems neater all > round, since adding the qual is closely related to the join-type > choice, which is now a decision taken entirely in > transform_MERGE_to_join(). This requires a new "mergeSourceRelation" > field on the Query structure, but as before, it does away with the > "mergeUseOuterJoin" field. > > I've also updated the ruleutils support. In the absence of any WHEN > NOT MATCHED BY SOURCE actions, this will output not-matched actions > simply as "WHEN NOT MATCHED" for backwards compatibility, and to be > SQL-standard-compliant. If there are any WHEN NOT MATCHED BY SOURCE > actions though, I think it's preferable to output explicit "BY SOURCE" > and "BY TARGET" qualifiers for all not-matched actions, to make the > meaning clearer. CFBot shows that the patch does not apply anymore as in [1]: === Applying patches on top of PostgreSQL commit ID f2bf8fb04886e3ea82e7f7f86696ac78e06b7e60 === === applying patch ./support-merge-when-not-matched-by-source-v8.patch ... patching file doc/src/sgml/ref/merge.sgml Hunk #5 FAILED at 409. Hunk #9 FAILED at 673. 2 out of 9 hunks FAILED -- saving rejects to file doc/src/sgml/ref/merge.sgml.rej .. patching file src/include/nodes/parsenodes.h Hunk #1 succeeded at 175 (offset -8 lines). Hunk #2 succeeded at 1657 (offset -6 lines). Hunk #3 succeeded at 1674 (offset -6 lines). Hunk #4 FAILED at 1696. 1 out of 4 hunks FAILED -- saving rejects to file src/include/nodes/parsenodes.h.rej Please post an updated version for the same. [1] - http://cfbot.cputube.org/patch_46_4092.log Regards, Vignesh
pgsql-hackers by date: