You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Rick Hillegas (JIRA)" <ji...@apache.org> on 2013/09/18 14:43:53 UTC

[jira] [Updated] (DERBY-3155) Support for SQL:2003 MERGE statement

     [ 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-02-ag-fixParserWarning.diff

Attaching derby-3155-02-ag-fixParserWarning.diff. This patch removes the spurious comma separating WHEN [ NOT ] MATCHED clauses in the grammar. I am running tests now.

This addresses two problems noted by Knut:

o You can't issue a MERGE statement with multiple WHEN [ NOT ] MATCHED clauses using the grammar described by the functional spec.

o If you compile verbosely, you see the following warning during parser generation:

[java] Note: UNICODE_INPUT option is specified. Please make sure you create the parser/lexer using a Reader with the correct character encoding.
[java] Warning: Choice conflict in (...)* construct at line 8313, column 31.
[java] Expansion nested within construct and expansion following construct
[java] have common prefixes, one of which is: ","
[java] Consider using a lookahead of 2 or more for nested expansion.

I had planned to roll this fix onto a patch with more functionality, but that patch is taking longer to write than I originally thought. So I'm submitting this small change by itself.


Touches the following file:

M       java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj

                
> 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, 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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira