1111
1212import java .io .StringReader ;
1313import net .sf .jsqlparser .JSQLParserException ;
14+ import net .sf .jsqlparser .expression .DoubleValue ;
1415import net .sf .jsqlparser .expression .JdbcParameter ;
1516import net .sf .jsqlparser .expression .LongValue ;
1617import net .sf .jsqlparser .expression .StringValue ;
1718import net .sf .jsqlparser .expression .operators .relational .GreaterThanEquals ;
1819import net .sf .jsqlparser .parser .CCJSqlParserManager ;
1920import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
21+ import net .sf .jsqlparser .schema .Column ;
2022import static net .sf .jsqlparser .test .TestUtils .*;
2123import static org .junit .jupiter .api .Assertions .assertEquals ;
2224import static org .junit .jupiter .api .Assertions .assertFalse ;
2628
2729public 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