Skip to content

Commit 7e2e720

Browse files
committed
fixed #232 without correction of order of update and insert
1 parent f4b2559 commit 7e2e720

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

src/main/java/net/sf/jsqlparser/statement/merge/Merge.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,13 @@ public String toString() {
112112
StringBuilder b = new StringBuilder();
113113
b.append("MERGE INTO ");
114114
b.append(table);
115-
b.append(" USING (");
115+
b.append(" USING ");
116116
if (usingTable != null) {
117117
b.append(usingTable.toString());
118118
} else if (usingSelect != null) {
119-
b.append(usingSelect.toString());
119+
b.append("(").append(usingSelect.toString()).append(")");
120120
}
121-
b.append(")");
121+
122122
if (usingAlias != null) {
123123
b.append(usingAlias.toString());
124124
}

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -582,10 +582,10 @@ Statement Merge() : {
582582
}
583583
{
584584
<K_MERGE> <K_INTO> table=TableWithAlias() { merge.setTable(table); }
585-
<K_USING> "("
585+
<K_USING>
586586
( table=Table() { merge.setUsingTable(table); }
587-
| select=SubSelect() { merge.setUsingSelect(select); } )
588-
")" [ alias = Alias() { merge.setUsingAlias(alias); } ] <K_ON>
587+
| "(" select=SubSelect() { merge.setUsingSelect(select); } ")" )
588+
[ alias = Alias() { merge.setUsingAlias(alias); } ] <K_ON>
589589
"(" condition = Condition() { merge.setOnCondition(condition); } ")"
590590

591591
[ LOOKAHEAD(2) update = MergeUpdateClause() { merge.setMergeUpdate(update); } ]

src/test/java/net/sf/jsqlparser/test/merge/MergeTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,16 @@ public void testOracleMergeIntoStatement() throws JSQLParserException {
5050

5151
assertSqlCanBeParsedAndDeparsed(sql, true);
5252
}
53+
54+
@Test
55+
public void testMergeIssue232() throws JSQLParserException {
56+
String sql = "MERGE INTO xyz using dual " +
57+
"ON ( custom_id = ? ) " +
58+
"WHEN matched THEN " +
59+
"UPDATE SET abc = sysdate " +
60+
"WHEN NOT matched THEN " +
61+
"INSERT (custom_id) VALUES (?)";
62+
63+
assertSqlCanBeParsedAndDeparsed(sql, true);
64+
}
5365
}

0 commit comments

Comments
 (0)