2121import net .sf .jsqlparser .schema .Table ;
2222import net .sf .jsqlparser .statement .Statement ;
2323import net .sf .jsqlparser .statement .StatementVisitor ;
24- import net .sf .jsqlparser .statement .select .FromItem ;
25- import net .sf .jsqlparser .statement .select .Join ;
26- import net .sf .jsqlparser .statement .select .Limit ;
27- import net .sf .jsqlparser .statement .select .OrderByElement ;
28- import net .sf .jsqlparser .statement .select .PlainSelect ;
29- import net .sf .jsqlparser .statement .select .Select ;
30- import net .sf .jsqlparser .statement .select .SelectExpressionItem ;
31- import net .sf .jsqlparser .statement .select .WithItem ;
24+ import net .sf .jsqlparser .statement .select .*;
3225
3326@ SuppressWarnings ({"PMD.CyclomaticComplexity" })
3427public class Update implements Statement {
3528
3629 private List <WithItem > withItemsList ;
3730 private Table table ;
3831 private Expression where ;
39- private List <Column > columns ;
40- private List <Expression > expressions ;
32+ private final ArrayList <UpdateSet > updateSets = new ArrayList <>();
4133 private FromItem fromItem ;
4234 private List <Join > joins ;
4335 private List <Join > startJoins ;
44- private Select select ;
45- private boolean useColumnsBrackets = true ;
46- private boolean useSelect = false ;
4736 private OracleHint oracleHint = null ;
4837 private List <OrderByElement > orderByElements ;
4938 private Limit limit ;
5039 private boolean returningAllColumns = false ;
5140 private List <SelectExpressionItem > returningExpressionList = null ;
5241
42+ public ArrayList <UpdateSet > getUpdateSets () {
43+ return updateSets ;
44+ }
45+
5346 @ Override
5447 public void accept (StatementVisitor statementVisitor ) {
5548 statementVisitor .visit (this );
@@ -104,20 +97,37 @@ public void setOracleHint(OracleHint oracleHint) {
10497 this .oracleHint = oracleHint ;
10598 }
10699
100+ public void addUpdateSet (Column column , Expression expression ) {
101+ updateSets .add (new UpdateSet (column , expression ));
102+ }
103+
104+ public void addUpdateSet (UpdateSet updateSet ) {
105+ updateSets .add (updateSet );
106+ }
107+
108+ @ Deprecated
107109 public List <Column > getColumns () {
108- return columns ;
110+ return updateSets . get ( 0 ). columns ;
109111 }
110112
113+ @ Deprecated
111114 public List <Expression > getExpressions () {
112- return expressions ;
115+ return updateSets . get ( 0 ). expressions ;
113116 }
114117
118+ @ Deprecated
115119 public void setColumns (List <Column > list ) {
116- columns = list ;
120+ if (updateSets .isEmpty ()) {
121+ updateSets .add (new UpdateSet ());
122+ }
123+ updateSets .get (0 ).columns .clear ();
124+ updateSets .get (0 ).columns .addAll (list );
117125 }
118126
127+ @ Deprecated
119128 public void setExpressions (List <Expression > list ) {
120- expressions = list ;
129+ updateSets .get (0 ).expressions .clear ();
130+ updateSets .get (0 ).expressions .addAll (list );
121131 }
122132
123133 public FromItem getFromItem () {
@@ -144,28 +154,49 @@ public void setStartJoins(List<Join> startJoins) {
144154 this .startJoins = startJoins ;
145155 }
146156
157+ @ Deprecated
147158 public Select getSelect () {
159+ Select select = null ;
160+ if (updateSets .get (0 ).expressions .get (0 ) instanceof SubSelect ) {
161+ SubSelect subSelect = (SubSelect ) updateSets .get (0 ).expressions .get (0 );
162+ select = new Select ().withWithItemsList (subSelect .getWithItemsList ()).withSelectBody (subSelect .getSelectBody ());
163+ }
164+
148165 return select ;
149166 }
150167
168+ @ Deprecated
151169 public void setSelect (Select select ) {
152- this .select = select ;
170+ if (select !=null ) {
171+ SubSelect subSelect = new SubSelect ().withSelectBody (select .getSelectBody ());
172+ if (select .getWithItemsList () != null && select .getWithItemsList ().size () > 0 )
173+ subSelect .setWithItemsList (select .getWithItemsList ());
174+
175+ if (updateSets .get (0 ).expressions .isEmpty ()) {
176+ updateSets .get (0 ).expressions .add (subSelect );
177+ } else {
178+ updateSets .get (0 ).expressions .set (0 , subSelect );
179+ }
180+ }
153181 }
154182
183+ @ Deprecated
155184 public boolean isUseColumnsBrackets () {
156- return useColumnsBrackets ;
185+ return updateSets . get ( 0 ). usingBrackets ;
157186 }
158187
188+ @ Deprecated
159189 public void setUseColumnsBrackets (boolean useColumnsBrackets ) {
160- this . useColumnsBrackets = useColumnsBrackets ;
190+ updateSets . get ( 0 ). usingBrackets = useColumnsBrackets ;
161191 }
162192
193+ @ Deprecated
163194 public boolean isUseSelect () {
164- return useSelect ;
195+ return ( updateSets . get ( 0 ). expressions . get ( 0 ) instanceof SubSelect ) ;
165196 }
166197
198+ @ Deprecated
167199 public void setUseSelect (boolean useSelect ) {
168- this .useSelect = useSelect ;
169200 }
170201
171202 public void setOrderByElements (List <OrderByElement > orderByElements ) {
@@ -201,7 +232,7 @@ public void setReturningExpressionList(List<SelectExpressionItem> returningExpre
201232 }
202233
203234 @ Override
204- @ SuppressWarnings ({"PMD.CyclomaticComplexity" , "PMD.NPathComplexity" })
235+ @ SuppressWarnings ({"PMD.CyclomaticComplexity" , "PMD.NPathComplexity" , "PMD.ExcessiveMethodLength" })
205236 public String toString () {
206237 StringBuilder b = new StringBuilder ();
207238
@@ -229,31 +260,64 @@ public String toString() {
229260 }
230261 b .append (" SET " );
231262
232- if (!useSelect ) {
233- for (int i = 0 ; i < getColumns ().size (); i ++) {
234- if (i != 0 ) {
235- b .append (", " );
236- }
237- b .append (columns .get (i )).append (" = " );
238- b .append (expressions .get (i ));
263+ int j =0 ;
264+ for (UpdateSet updateSet :updateSets ) {
265+ if (j > 0 ) {
266+ b .append (", " );
239267 }
240- } else {
241- if (useColumnsBrackets ) {
268+
269+ if (updateSet . usingBrackets ) {
242270 b .append ("(" );
243271 }
244- for (int i = 0 ; i < getColumns ().size (); i ++) {
245- if (i != 0 ) {
272+
273+ for (int i = 0 ; i < updateSet .columns .size (); i ++) {
274+ if (i > 0 ) {
246275 b .append (", " );
247276 }
248- b .append (columns .get (i ));
277+ b .append (updateSet . columns .get (i ));
249278 }
250- if (useColumnsBrackets ) {
279+
280+ if (updateSet .usingBrackets ) {
251281 b .append (")" );
252282 }
283+
253284 b .append (" = " );
254- b .append ("(" ).append (select ).append (")" );
285+
286+ for (int i = 0 ; i < updateSet .expressions .size (); i ++) {
287+ if (i > 0 ) {
288+ b .append (", " );
289+ }
290+ b .append (updateSet .expressions .get (i ));
291+ }
292+
293+ j ++;
255294 }
256295
296+ // if (!useSelect) {
297+ // for (int i = 0; i < getColumns().size(); i++) {
298+ // if (i != 0) {
299+ // b.append(", ");
300+ // }
301+ // b.append(columns.get(i)).append(" = ");
302+ // b.append(expressions.get(i));
303+ // }
304+ // } else {
305+ // if (useColumnsBrackets) {
306+ // b.append("(");
307+ // }
308+ // for (int i = 0; i < getColumns().size(); i++) {
309+ // if (i != 0) {
310+ // b.append(", ");
311+ // }
312+ // b.append(columns.get(i));
313+ // }
314+ // if (useColumnsBrackets) {
315+ // b.append(")");
316+ // }
317+ // b.append(" = ");
318+ // b.append("(").append(select).append(")");
319+ // }
320+
257321 if (fromItem != null ) {
258322 b .append (" FROM " ).append (fromItem );
259323 if (joins != null ) {
0 commit comments