[ 
https://issues.apache.org/jira/browse/DERBY-3155?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rick Hillegas updated DERBY-3155:
---------------------------------

    Attachment: derby-3155-04-ae-deleteAction.diff

Attaching derby-3155-04-ae-deleteAction.diff. This patch adds code-generation 
and execution support for the DELETE actions of MERGE statements. With this 
patch I am able to successfully use a MERGE statement to DELETE rows from a 
table. Cascaded foreign keys and DELETE trigger actions are handled correctly. 
I have only been able to test this functionality with search conditions which 
cause the optimizer to pick a nested loop strategy for the driving left join of 
the MERGE statement. This patch will need to be adjusted after the review of 
derby-3155-03-af-backingStoreHashtableWithRowLocation.diff is done and that 
functionality is committed. However, I am attaching this patch now just in case 
my laptop suffers a disaster in the meantime.

Even after adjustment, the DELETE functionality will need more work, 
particularly in the areas of permissions checking and dependency tracking.

For people who are interested in a preliminary peek at the implementation, the 
best place to start is the header comment on MergeNode.


> Support for SQL:2003 MERGE statement
> ------------------------------------
>
>                 Key: DERBY-3155
>                 URL: https://issues.apache.org/jira/browse/DERBY-3155
>             Project: Derby
>          Issue Type: Improvement
>          Components: SQL
>            Reporter: Trejkaz
>            Assignee: Rick Hillegas
>              Labels: derby_triage10_10
>         Attachments: derby-3155-01-ac-grammar.diff, 
> derby-3155-02-ag-fixParserWarning.diff, 
> derby-3155-03-ae-backingStoreHashtableWithRowLocation.diff, 
> derby-3155-03-af-backingStoreHashtableWithRowLocation.diff, 
> derby-3155-04-ae-deleteAction.diff, MergeStatement.html, MergeStatement.html, 
> MergeStatement.html
>
>
> A relatively common piece of logic in a database application is to check for 
> a row's existence and then either update or insert depending on its existence.
> SQL:2003 added a MERGE statement to perform this operation.  It looks like 
> this:
>     MERGE INTO table_name USING table_name ON (condition)
>     WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...]
>     WHEN NOT MATCHED THEN INSERT column1 [, column2 ...] VALUES (value1 [, 
> value2 ...]) 
> At the moment, the only workaround for this would be to write a stored 
> procedure to do the same operation, or to implement the logic client-side.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to