db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mike Matrigali (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DERBY-3155) Support for SQL:2003 MERGE statement
Date Wed, 09 Oct 2013 00:37:43 GMT

    [ https://issues.apache.org/jira/browse/DERBY-3155?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13789878#comment-13789878

Mike Matrigali commented on DERBY-3155:

initial high level thought on store api changes, still looking at detail code.

1) I was hoping that the interface change could somehow be made specific to just the merge
usage.  Instead it looks like you changed
    the generic hash scan result set code to now handle this mode in addition to original
mode.   While better for code sharing, there
    is obviously more overhead for the original code and the original fast path to handle
more arguments and more if/then/elses for the
    new row passing scheme.  I know the overhead is likely small, but would like to avoid
if possible.  This may be acceptable, for me it makes a complicated interface even more complicated.
 Was looking maybe for
    a brand new backing store hash table that only handled this new LocatedRow.  Downside
is probably this causes less code sharing and   new interfaces that are similar to old ones
with just handling the new row holder rather than the old.  

2) also see that you have a new LocatedRow which seems like a very clean way to handle a row
and it's associated row location.  But there are interfaces to shove the RowLocation onto
the end of the row, which I think is a bad idea.  If this is really needed I wonder if we
can move that representation out of the store interface and into the sql layer somehow.  
It may become obvious on more detailed review but can you say why this is needed.  

> 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, 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

View raw message