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