[ 
https://issues.apache.org/jira/browse/CALCITE-492?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14233549#comment-14233549
 ] 

Julian Hyde commented on CALCITE-492:
-------------------------------------

I was initially thinking we would have create a Phoenix-specific extension to 
the parser. But since UPSERT is identical to INSERT except for the first word, 
that would seem to be overkill. I think it would work to add a new reserved 
word, parse UPSERT as INSERT, and add a boolean flag to SqlInsert AST node.

That flag would be carried into the TableModify relational expression, perhaps 
an extra value in its enum Operation { INSERT, UPDATE, DELETE, MERGE }. It's 
TBD whether UPSERT behaves more like INSERT or MERGE during optimization. It's 
clear that it's more like INSERT at parse time.

> Support UPSERT statement in parser
> ----------------------------------
>
>                 Key: CALCITE-492
>                 URL: https://issues.apache.org/jira/browse/CALCITE-492
>             Project: Calcite
>          Issue Type: Improvement
>            Reporter: James Taylor
>            Assignee: Julian Hyde
>              Labels: phoenix
>
> Support an UPSERT VALUES and UPSERT SELECT statement in Calcite. These have 
> the same syntax as INSERT VALUES and INSERT SELECT, but they insert the row 
> if it doesn't already exist and update it otherwise. This is a pretty common 
> pattern for big data applications that want to have an option to write 
> without reading first. See 
> http://phoenix.apache.org/language/index.html#upsert_values and 
> http://phoenix.apache.org/language/index.html#upsert_select for syntax.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to