Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
feat: support snowflake merge statements
Adds support for the ON clause of a MERGE statement to be without
enclosing parens, as is the convention in Snowflake.
  • Loading branch information
davidjgoss committed Nov 8, 2023
commit 0ae84affd0f2b4c6ae0a0be195eaabd971ffd319
3 changes: 1 addition & 2 deletions src/main/java/net/sf/jsqlparser/statement/merge/Merge.java
Original file line number Diff line number Diff line change
Expand Up @@ -186,9 +186,8 @@ public String toString() {
b.append(table);
b.append(" USING ");
b.append(fromItem);
b.append(" ON (");
b.append(" ON ");
b.append(onCondition);
b.append(")");

if (insertFirst && mergeInsert != null) {
b.append(mergeInsert);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,9 +216,8 @@ public void visit(Merge merge) {
buffer.append(" USING ");
merge.getFromItem().accept(selectDeParser);

buffer.append(" ON (");
buffer.append(" ON ");
merge.getOnCondition().accept(expressionDeParser);
buffer.append(")");

MergeInsert mergeInsert = merge.getMergeInsert();
MergeUpdate mergeUpdate = merge.getMergeUpdate();
Expand Down
2 changes: 1 addition & 1 deletion src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -1659,7 +1659,7 @@ Statement Merge( List<WithItem> with ) : {
{
<K_MERGE> { merge.setOracleHint(getOracleHint()); } <K_INTO> table=TableWithAlias() { merge.setTable(table); }
<K_USING> fromItem = FromItem() { merge.setFromItem(fromItem); }
<K_ON> "(" condition = Expression() { merge.setOnCondition(condition); } ")"
<K_ON> condition = Expression() { merge.setOnCondition(condition); }

[
( LOOKAHEAD(2) update = MergeUpdateClause() { merge.setMergeUpdate(update); }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,4 +236,13 @@ public void testOutputClause() throws JSQLParserException {
+ " TAB_MergeActions_RoomLocation";
assertSqlCanBeParsedAndDeparsed(sqlStr, true);
}

@Test
public void testSnowflakeMergeStatement() throws JSQLParserException {
String sql = "MERGE INTO target\n" +
" USING src ON target.k = src.k\n" +
" WHEN MATCHED THEN UPDATE SET target.v = src.v";

assertSqlCanBeParsedAndDeparsed(sql, true);
}
}