21
21
import net .sf .jsqlparser .schema .Table ;
22
22
import net .sf .jsqlparser .statement .Statement ;
23
23
import 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 .*;
32
25
33
26
@ SuppressWarnings ({"PMD.CyclomaticComplexity" })
34
27
public class Update implements Statement {
35
28
36
29
private List <WithItem > withItemsList ;
37
30
private Table table ;
38
31
private Expression where ;
39
- private List <Column > columns ;
40
- private List <Expression > expressions ;
32
+ private final ArrayList <UpdateSet > updateSets = new ArrayList <>();
41
33
private FromItem fromItem ;
42
34
private List <Join > joins ;
43
35
private List <Join > startJoins ;
44
- private Select select ;
45
- private boolean useColumnsBrackets = true ;
46
- private boolean useSelect = false ;
47
36
private OracleHint oracleHint = null ;
48
37
private List <OrderByElement > orderByElements ;
49
38
private Limit limit ;
50
39
private boolean returningAllColumns = false ;
51
40
private List <SelectExpressionItem > returningExpressionList = null ;
52
41
42
+ public ArrayList <UpdateSet > getUpdateSets () {
43
+ return updateSets ;
44
+ }
45
+
53
46
@ Override
54
47
public void accept (StatementVisitor statementVisitor ) {
55
48
statementVisitor .visit (this );
@@ -104,20 +97,37 @@ public void setOracleHint(OracleHint oracleHint) {
104
97
this .oracleHint = oracleHint ;
105
98
}
106
99
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
107
109
public List <Column > getColumns () {
108
- return columns ;
110
+ return updateSets . get ( 0 ). columns ;
109
111
}
110
112
113
+ @ Deprecated
111
114
public List <Expression > getExpressions () {
112
- return expressions ;
115
+ return updateSets . get ( 0 ). expressions ;
113
116
}
114
117
118
+ @ Deprecated
115
119
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 );
117
125
}
118
126
127
+ @ Deprecated
119
128
public void setExpressions (List <Expression > list ) {
120
- expressions = list ;
129
+ updateSets .get (0 ).expressions .clear ();
130
+ updateSets .get (0 ).expressions .addAll (list );
121
131
}
122
132
123
133
public FromItem getFromItem () {
@@ -144,28 +154,49 @@ public void setStartJoins(List<Join> startJoins) {
144
154
this .startJoins = startJoins ;
145
155
}
146
156
157
+ @ Deprecated
147
158
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
+
148
165
return select ;
149
166
}
150
167
168
+ @ Deprecated
151
169
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
+ }
153
181
}
154
182
183
+ @ Deprecated
155
184
public boolean isUseColumnsBrackets () {
156
- return useColumnsBrackets ;
185
+ return updateSets . get ( 0 ). usingBrackets ;
157
186
}
158
187
188
+ @ Deprecated
159
189
public void setUseColumnsBrackets (boolean useColumnsBrackets ) {
160
- this . useColumnsBrackets = useColumnsBrackets ;
190
+ updateSets . get ( 0 ). usingBrackets = useColumnsBrackets ;
161
191
}
162
192
193
+ @ Deprecated
163
194
public boolean isUseSelect () {
164
- return useSelect ;
195
+ return ( updateSets . get ( 0 ). expressions . get ( 0 ) instanceof SubSelect ) ;
165
196
}
166
197
198
+ @ Deprecated
167
199
public void setUseSelect (boolean useSelect ) {
168
- this .useSelect = useSelect ;
169
200
}
170
201
171
202
public void setOrderByElements (List <OrderByElement > orderByElements ) {
@@ -201,7 +232,7 @@ public void setReturningExpressionList(List<SelectExpressionItem> returningExpre
201
232
}
202
233
203
234
@ Override
204
- @ SuppressWarnings ({"PMD.CyclomaticComplexity" , "PMD.NPathComplexity" })
235
+ @ SuppressWarnings ({"PMD.CyclomaticComplexity" , "PMD.NPathComplexity" , "PMD.ExcessiveMethodLength" })
205
236
public String toString () {
206
237
StringBuilder b = new StringBuilder ();
207
238
@@ -229,31 +260,64 @@ public String toString() {
229
260
}
230
261
b .append (" SET " );
231
262
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 (", " );
239
267
}
240
- } else {
241
- if (useColumnsBrackets ) {
268
+
269
+ if (updateSet . usingBrackets ) {
242
270
b .append ("(" );
243
271
}
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 ) {
246
275
b .append (", " );
247
276
}
248
- b .append (columns .get (i ));
277
+ b .append (updateSet . columns .get (i ));
249
278
}
250
- if (useColumnsBrackets ) {
279
+
280
+ if (updateSet .usingBrackets ) {
251
281
b .append (")" );
252
282
}
283
+
253
284
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 ++;
255
294
}
256
295
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
+
257
321
if (fromItem != null ) {
258
322
b .append (" FROM " ).append (fromItem );
259
323
if (joins != null ) {
0 commit comments