Skip to content

Commit 84f8e78

Browse files
authored
Merge pull request #495 from packageOk/master
fix issue492
2 parents 147ec48 + 93598bb commit 84f8e78

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

src/main/java/net/sf/jsqlparser/util/deparser/ReplaceDeParser.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,20 @@ public void setSelectVisitor(SelectVisitor visitor) {
148148

149149
@Override
150150
public void visit(MultiExpressionList multiExprList) {
151-
throw new UnsupportedOperationException("Not supported yet.");
151+
buffer.append("VALUES ");
152+
for (Iterator<ExpressionList> it = multiExprList.getExprList().iterator(); it.hasNext();) {
153+
buffer.append("(");
154+
for (Iterator<Expression> iter = it.next().getExpressions().iterator(); iter.hasNext();) {
155+
Expression expression = iter.next();
156+
expression.accept(expressionVisitor);
157+
if (iter.hasNext()) {
158+
buffer.append(", ");
159+
}
160+
}
161+
buffer.append(")");
162+
if (it.hasNext()) {
163+
buffer.append(", ");
164+
}
165+
}
152166
}
153167
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ Replace Replace():
528528

529529
List<Column> columns = new ArrayList<Column>();
530530
List<Expression> expList = new ArrayList<Expression>();
531+
MultiExpressionList multiExpr = null;
531532
ItemsList itemsList = null;
532533
Expression exp = null;
533534
}
@@ -549,6 +550,15 @@ Replace Replace():
549550
(
550551
LOOKAHEAD(2) [<K_VALUES> | <K_VALUE>] "(" exp=PrimaryExpression() { expList.add(exp); }
551552
("," exp=PrimaryExpression() { expList.add(exp); } )* ")" { itemsList = new ExpressionList(expList); }
553+
("," "(" exp=SimpleExpression() {
554+
if (multiExpr==null) {
555+
multiExpr=new MultiExpressionList();
556+
multiExpr.addExpressionList((ExpressionList)itemsList);
557+
itemsList = multiExpr;
558+
}
559+
expList = new ArrayList<Expression>();
560+
expList.add(exp); }
561+
("," exp=SimpleExpression() { expList.add(exp); } )* ")" { multiExpr.addExpressionList(expList); } )*
552562
|
553563
{ replace.setUseValues(false); }
554564
itemsList=SubSelect()

src/test/java/net/sf/jsqlparser/test/replace/ReplaceTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,11 @@ public void testProblemMissingIntoIssue389() throws JSQLParserException {
7676
TestUtils.
7777
assertSqlCanBeParsedAndDeparsed("REPLACE INTO mytable (key, data) VALUES (1, \"aaa\")");
7878
}
79+
80+
81+
@Test
82+
public void testMultipleValues() throws JSQLParserException {
83+
TestUtils.
84+
assertSqlCanBeParsedAndDeparsed("REPLACE INTO mytable (col1, col2, col3) VALUES (1, \"aaa\", now()), (2, \"bbb\", now())");
85+
}
7986
}

0 commit comments

Comments
 (0)