Skip to content

Commit 1abaf4c

Browse files
committed
fixes #1590
1 parent 87a37d7 commit 1abaf4c

File tree

2 files changed

+48
-37
lines changed

2 files changed

+48
-37
lines changed

src/main/java/net/sf/jsqlparser/statement/update/Update.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@ public Limit getLimit() {
229229
return limit;
230230
}
231231

232-
233232
public List<SelectItem> getReturningExpressionList() {
234233
return returningExpressionList;
235234
}
@@ -254,7 +253,6 @@ public void setModifierIgnore(boolean modifierIgnore) {
254253
this.modifierIgnore = modifierIgnore;
255254
}
256255

257-
258256
@Override
259257
@SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.NPathComplexity", "PMD.ExcessiveMethodLength"})
260258
public String toString() {
@@ -330,7 +328,7 @@ public String toString() {
330328
j++;
331329
}
332330

333-
if (outputClause!=null) {
331+
if (outputClause != null) {
334332
outputClause.appendTo(b);
335333
}
336334

@@ -411,7 +409,6 @@ public Update withLimit(Limit limit) {
411409
return this;
412410
}
413411

414-
415412
public Update withReturningExpressionList(List<SelectItem> returningExpressionList) {
416413
this.setReturningExpressionList(returningExpressionList);
417414
return this;
@@ -432,36 +429,36 @@ public Update withExpressions(List<Expression> expressions) {
432429
return this;
433430
}
434431

435-
public Update withModifierPriority(UpdateModifierPriority modifierPriority){
432+
public Update withModifierPriority(UpdateModifierPriority modifierPriority) {
436433
this.setModifierPriority(modifierPriority);
437434
return this;
438435
}
439436

440-
public Update withModifierIgnore(boolean modifierIgnore){
437+
public Update withModifierIgnore(boolean modifierIgnore) {
441438
this.setModifierIgnore(modifierIgnore);
442439
return this;
443440
}
444441

445442
public Update addColumns(Column... columns) {
446-
List<Column> collection = Optional.ofNullable(getColumns()).orElseGet(ArrayList::new);
443+
List<Column> collection = new ArrayList<>(Optional.ofNullable(getColumns()).orElseGet(ArrayList::new));
447444
Collections.addAll(collection, columns);
448445
return this.withColumns(collection);
449446
}
450447

451448
public Update addColumns(Collection<? extends Column> columns) {
452-
List<Column> collection = Optional.ofNullable(getColumns()).orElseGet(ArrayList::new);
449+
List<Column> collection = new ArrayList<>(Optional.ofNullable(getColumns()).orElseGet(ArrayList::new));
453450
collection.addAll(columns);
454451
return this.withColumns(collection);
455452
}
456453

457454
public Update addExpressions(Expression... expressions) {
458-
List<Expression> collection = Optional.ofNullable(getExpressions()).orElseGet(ArrayList::new);
455+
List<Expression> collection = new ArrayList<>(Optional.ofNullable(getExpressions()).orElseGet(ArrayList::new));
459456
Collections.addAll(collection, expressions);
460457
return this.withExpressions(collection);
461458
}
462459

463460
public Update addExpressions(Collection<? extends Expression> expressions) {
464-
List<Expression> collection = Optional.ofNullable(getExpressions()).orElseGet(ArrayList::new);
461+
List<Expression> collection = new ArrayList<>(Optional.ofNullable(getExpressions()).orElseGet(ArrayList::new));
465462
collection.addAll(expressions);
466463
return this.withExpressions(collection);
467464
}

src/test/java/net/sf/jsqlparser/statement/update/UpdateTest.java

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111

1212
import java.io.StringReader;
1313
import net.sf.jsqlparser.JSQLParserException;
14+
import net.sf.jsqlparser.expression.DoubleValue;
1415
import net.sf.jsqlparser.expression.JdbcParameter;
1516
import net.sf.jsqlparser.expression.LongValue;
1617
import net.sf.jsqlparser.expression.StringValue;
1718
import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals;
1819
import net.sf.jsqlparser.parser.CCJSqlParserManager;
1920
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
21+
import net.sf.jsqlparser.schema.Column;
2022
import static net.sf.jsqlparser.test.TestUtils.*;
2123
import static org.junit.jupiter.api.Assertions.assertEquals;
2224
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -26,12 +28,12 @@
2628

2729
public class UpdateTest {
2830

29-
private static CCJSqlParserManager parserManager = new CCJSqlParserManager();
31+
private static final CCJSqlParserManager PARSER_MANAGER = new CCJSqlParserManager();
3032

3133
@Test
3234
public void testUpdate() throws JSQLParserException {
3335
String statement = "UPDATE mytable set col1='as', col2=?, col3=565 Where o >= 3";
34-
Update update = (Update) parserManager.parse(new StringReader(statement));
36+
Update update = (Update) PARSER_MANAGER.parse(new StringReader(statement));
3537
assertEquals("mytable", update.getTable().toString());
3638
assertEquals(3, update.getUpdateSets().size());
3739
assertEquals("col1", update.getUpdateSets().get(0).getColumns().get(0).getColumnName());
@@ -47,7 +49,7 @@ public void testUpdate() throws JSQLParserException {
4749
@Test
4850
public void testUpdateWAlias() throws JSQLParserException {
4951
String statement = "UPDATE table1 A SET A.columna = 'XXX' WHERE A.cod_table = 'YYY'";
50-
Update update = (Update) parserManager.parse(new StringReader(statement));
52+
Update update = (Update) PARSER_MANAGER.parse(new StringReader(statement));
5153
}
5254

5355
@Test
@@ -113,7 +115,7 @@ public void testUpdateWithReturningList() throws JSQLParserException {
113115
@Test
114116
public void testUpdateDoesNotAllowLimitOffset() {
115117
String statement = "UPDATE table1 A SET A.columna = 'XXX' WHERE A.cod_table = 'YYY' LIMIT 3,4";
116-
assertThrows(JSQLParserException.class, () -> parserManager.parse(new StringReader(statement)));
118+
assertThrows(JSQLParserException.class, () -> PARSER_MANAGER.parse(new StringReader(statement)));
117119
}
118120

119121
@Test
@@ -275,32 +277,44 @@ public void testUpdateMultipleModifiers() throws JSQLParserException {
275277
@Test
276278
public void testUpdateOutputClause() throws JSQLParserException {
277279
assertSqlCanBeParsedAndDeparsed(
278-
"UPDATE /* TOP (10) */ HumanResources.Employee \n" +
279-
"SET VacationHours = VacationHours * 1.25, \n" +
280-
" ModifiedDate = GETDATE() \n" +
281-
"OUTPUT inserted.BusinessEntityID, \n" +
282-
" deleted.VacationHours, \n" +
283-
" inserted.VacationHours, \n" +
284-
" inserted.ModifiedDate \n" +
285-
"INTO @MyTableVar"
286-
, true
280+
"UPDATE /* TOP (10) */ HumanResources.Employee \n"
281+
+ "SET VacationHours = VacationHours * 1.25, \n"
282+
+ " ModifiedDate = GETDATE() \n"
283+
+ "OUTPUT inserted.BusinessEntityID, \n"
284+
+ " deleted.VacationHours, \n"
285+
+ " inserted.VacationHours, \n"
286+
+ " inserted.ModifiedDate \n"
287+
+ "INTO @MyTableVar",
288+
true
287289
);
288290

289291
assertSqlCanBeParsedAndDeparsed(
290-
"UPDATE Production.WorkOrder \n" +
291-
"SET ScrapReasonID = 4 \n" +
292-
"OUTPUT deleted.ScrapReasonID, \n" +
293-
" inserted.ScrapReasonID, \n" +
294-
" inserted.WorkOrderID, \n" +
295-
" inserted.ProductID, \n" +
296-
" p.Name \n" +
297-
" INTO @MyTestVar \n" +
298-
"FROM Production.WorkOrder AS wo \n" +
299-
" INNER JOIN Production.Product AS p \n" +
300-
" ON wo.ProductID = p.ProductID \n" +
301-
" AND wo.ScrapReasonID= 16 \n" +
302-
" AND p.ProductID = 733"
303-
, true
292+
"UPDATE Production.WorkOrder \n"
293+
+ "SET ScrapReasonID = 4 \n"
294+
+ "OUTPUT deleted.ScrapReasonID, \n"
295+
+ " inserted.ScrapReasonID, \n"
296+
+ " inserted.WorkOrderID, \n"
297+
+ " inserted.ProductID, \n"
298+
+ " p.Name \n"
299+
+ " INTO @MyTestVar \n"
300+
+ "FROM Production.WorkOrder AS wo \n"
301+
+ " INNER JOIN Production.Product AS p \n"
302+
+ " ON wo.ProductID = p.ProductID \n"
303+
+ " AND wo.ScrapReasonID= 16 \n"
304+
+ " AND p.ProductID = 733",
305+
true
304306
);
305307
}
308+
309+
@Test
310+
public void testUpdateSetsIssue1590() throws JSQLParserException {
311+
Update update = (Update) CCJSqlParserUtil.parse("update mytable set a=5 where b = 2");
312+
assertEquals(1, update.getUpdateSets().size());
313+
update.addColumns(new Column("y"));
314+
update.addExpressions(new DoubleValue("6"));
315+
update.getUpdateSets().get(0).setUsingBracketsForColumns(true);
316+
update.getUpdateSets().get(0).setUsingBracketsForValues(true);
317+
318+
assertEquals("UPDATE mytable SET (a, y) = (5, 6) WHERE b = 2", update.toString());
319+
}
306320
}

0 commit comments

Comments
 (0)