Lines 29-35
Link Here
|
29 |
* The Original Software is NetBeans. The Initial Developer of the Original |
29 |
* The Original Software is NetBeans. The Initial Developer of the Original |
30 |
* Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun |
30 |
* Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun |
31 |
* Microsystems, Inc. All Rights Reserved. |
31 |
* Microsystems, Inc. All Rights Reserved. |
32 |
* |
32 |
*a |
33 |
* If you wish your version of this file to be governed by only the CDDL |
33 |
* If you wish your version of this file to be governed by only the CDDL |
34 |
* or only the GPL Version 2, indicate your decision by adding |
34 |
* or only the GPL Version 2, indicate your decision by adding |
35 |
* "[Contributor] elects to include this software in this distribution |
35 |
* "[Contributor] elects to include this software in this distribution |
Lines 48-55
Link Here
|
48 |
import java.sql.Connection; |
48 |
import java.sql.Connection; |
49 |
import java.sql.SQLException; |
49 |
import java.sql.SQLException; |
50 |
import java.sql.Types; |
50 |
import java.sql.Types; |
|
|
51 |
import java.util.HashSet; |
51 |
import java.util.List; |
52 |
import java.util.List; |
52 |
import java.util.Map; |
53 |
import java.util.Map; |
|
|
54 |
import java.util.Set; |
53 |
import java.util.logging.Level; |
55 |
import java.util.logging.Level; |
54 |
import java.util.logging.Logger; |
56 |
import java.util.logging.Logger; |
55 |
import org.netbeans.modules.db.dataview.meta.DBColumn; |
57 |
import org.netbeans.modules.db.dataview.meta.DBColumn; |
Lines 70-85
Link Here
|
70 |
class SQLStatementGenerator { |
72 |
class SQLStatementGenerator { |
71 |
private static final Logger LOG = |
73 |
private static final Logger LOG = |
72 |
Logger.getLogger(SQLStatementGenerator.class.getName()); |
74 |
Logger.getLogger(SQLStatementGenerator.class.getName()); |
73 |
private DataViewDBTable tblMeta; |
75 |
|
74 |
private DataView dataView; |
|
|
75 |
|
76 |
public SQLStatementGenerator(DataView dataView) { |
77 |
this.dataView = dataView; |
78 |
this.tblMeta = dataView.getDataViewDBTable(); |
79 |
} |
80 |
|
81 |
// TODO: Generated by default, can be overwitten by user, allow that |
76 |
// TODO: Generated by default, can be overwitten by user, allow that |
82 |
String generateInsertStatement(Object[] insertedRow) throws DBException { |
77 |
String generateInsertStatement(DBTable table, Object[] insertedRow) throws DBException { |
|
|
78 |
List<DBColumn> columns = table.getColumnList(); |
79 |
|
83 |
StringBuilder insertSql = new StringBuilder(); |
80 |
StringBuilder insertSql = new StringBuilder(); |
84 |
insertSql.append("INSERT INTO "); // NOI18N |
81 |
insertSql.append("INSERT INTO "); // NOI18N |
85 |
|
82 |
|
Lines 88-94
Link Here
|
88 |
String commaStr = ", "; // NOI18N |
85 |
String commaStr = ", "; // NOI18N |
89 |
boolean comma = false; |
86 |
boolean comma = false; |
90 |
for (int i = 0; i < insertedRow.length; i++) { |
87 |
for (int i = 0; i < insertedRow.length; i++) { |
91 |
DBColumn dbcol = tblMeta.getColumn(i); |
88 |
DBColumn dbcol = columns.get(i); |
92 |
Object val = insertedRow[i]; |
89 |
Object val = insertedRow[i]; |
93 |
|
90 |
|
94 |
if (dbcol.isGenerated()) { // NOI18N |
91 |
if (dbcol.isGenerated()) { // NOI18N |
Lines 117-123
Link Here
|
117 |
} |
114 |
} |
118 |
|
115 |
|
119 |
colNames.append(")"); // NOI18N |
116 |
colNames.append(")"); // NOI18N |
120 |
insertSql.append(tblMeta.getFullyQualifiedName(0, true)); |
117 |
insertSql.append(table.getFullyQualifiedName(true)); |
121 |
insertSql.append(colNames.toString()); |
118 |
insertSql.append(colNames.toString()); |
122 |
insertSql.append(" Values("); // NOI18N |
119 |
insertSql.append(" Values("); // NOI18N |
123 |
insertSql.append(values.toString()); |
120 |
insertSql.append(values.toString()); |
Lines 126-132
Link Here
|
126 |
return insertSql.toString(); |
123 |
return insertSql.toString(); |
127 |
} |
124 |
} |
128 |
|
125 |
|
129 |
String generateRawInsertStatement(Object[] insertedRow) throws DBException { |
126 |
String generateRawInsertStatement(DBTable table, Object[] insertedRow) throws DBException { |
|
|
127 |
List<DBColumn> columns = table.getColumnList(); |
128 |
|
130 |
StringBuilder rawInsertSql = new StringBuilder(); |
129 |
StringBuilder rawInsertSql = new StringBuilder(); |
131 |
rawInsertSql.append("INSERT INTO "); // NOI18N |
130 |
rawInsertSql.append("INSERT INTO "); // NOI18N |
132 |
|
131 |
|
Lines 135-141
Link Here
|
135 |
String commaStr = ", "; // NOI18N |
134 |
String commaStr = ", "; // NOI18N |
136 |
boolean comma = false; |
135 |
boolean comma = false; |
137 |
for (int i = 0; i < insertedRow.length; i++) { |
136 |
for (int i = 0; i < insertedRow.length; i++) { |
138 |
DBColumn dbcol = tblMeta.getColumn(i); |
137 |
DBColumn dbcol = columns.get(i); |
139 |
Object val = insertedRow[i]; |
138 |
Object val = insertedRow[i]; |
140 |
|
139 |
|
141 |
if (dbcol.isGenerated()) { // NOI18N |
140 |
if (dbcol.isGenerated()) { // NOI18N |
Lines 164-170
Link Here
|
164 |
} |
163 |
} |
165 |
|
164 |
|
166 |
rawcolNames += ")"; // NOI18N |
165 |
rawcolNames += ")"; // NOI18N |
167 |
rawInsertSql.append(tblMeta.getFullyQualifiedName(0, false)); |
166 |
rawInsertSql.append(table.getFullyQualifiedName(false)); |
168 |
rawInsertSql.append(rawcolNames); |
167 |
rawInsertSql.append(rawcolNames); |
169 |
rawInsertSql.append(" \n\tVALUES ("); // NOI18N |
168 |
rawInsertSql.append(" \n\tVALUES ("); // NOI18N |
170 |
rawInsertSql.append(rawvalues); |
169 |
rawInsertSql.append(rawvalues); |
Lines 173-185
Link Here
|
173 |
return rawInsertSql.toString(); |
172 |
return rawInsertSql.toString(); |
174 |
} |
173 |
} |
175 |
|
174 |
|
176 |
String generateUpdateStatement(int row, Map<Integer, Object> changedRow, List<Object> values, List<Integer> types, DataViewTableUIModel tblModel) throws DBException { |
175 |
String generateUpdateStatement(DBTable table, int row, Map<Integer, Object> changedRow, List<Object> values, List<Integer> types, DataViewTableUIModel tblModel) throws DBException { |
|
|
176 |
List<DBColumn> columns = table.getColumnList(); |
177 |
|
177 |
StringBuilder updateStmt = new StringBuilder(); |
178 |
StringBuilder updateStmt = new StringBuilder(); |
178 |
updateStmt.append("UPDATE ").append(tblMeta.getFullyQualifiedName(0, true)).append(" SET "); // NOI18N |
179 |
updateStmt.append("UPDATE ").append(table.getFullyQualifiedName(true)).append(" SET "); // NOI18N |
179 |
String commaStr = ", "; // NOI18N |
180 |
String commaStr = ", "; // NOI18N |
180 |
boolean comma = false; |
181 |
boolean comma = false; |
181 |
for (Integer col : changedRow.keySet()) { |
182 |
for (Integer col : changedRow.keySet()) { |
182 |
DBColumn dbcol = tblMeta.getColumn(col); |
183 |
DBColumn dbcol = columns.get(col); |
183 |
Object value = changedRow.get(col); |
184 |
Object value = changedRow.get(col); |
184 |
int type = dbcol.getJdbcType(); |
185 |
int type = dbcol.getJdbcType(); |
185 |
|
186 |
|
Lines 193-199
Link Here
|
193 |
comma = true; |
194 |
comma = true; |
194 |
} |
195 |
} |
195 |
|
196 |
|
196 |
updateStmt.append(tblMeta.getQualifiedName(col, true)); |
197 |
updateStmt.append(dbcol.getQualifiedName(true)); |
197 |
// Check for Constant e.g <NULL>, <DEFAULT>, <CURRENT_TIMESTAMP> etc |
198 |
// Check for Constant e.g <NULL>, <DEFAULT>, <CURRENT_TIMESTAMP> etc |
198 |
if (value != null && DataViewUtils.isSQLConstantString(value, dbcol)) { |
199 |
if (value != null && DataViewUtils.isSQLConstantString(value, dbcol)) { |
199 |
String constStr = ((String) value).substring(1, ((String) value).length() - 1); |
200 |
String constStr = ((String) value).substring(1, ((String) value).length() - 1); |
Lines 209-226
Link Here
|
209 |
} |
210 |
} |
210 |
|
211 |
|
211 |
updateStmt.append(" WHERE "); // NOI18N |
212 |
updateStmt.append(" WHERE "); // NOI18N |
212 |
generateWhereCondition(updateStmt, types, values, row, tblModel); |
213 |
generateWhereCondition(table, updateStmt, types, values, row, tblModel); |
213 |
return updateStmt.toString(); |
214 |
return updateStmt.toString(); |
214 |
} |
215 |
} |
215 |
|
216 |
|
216 |
String generateUpdateStatement(int row, Map<Integer, Object> changedRow, DataViewTableUIModel tblModel) throws DBException { |
217 |
String generateUpdateStatement(DBTable table, int row, Map<Integer, Object> changedRow, DataViewTableUIModel tblModel) throws DBException { |
|
|
218 |
List<DBColumn> columns = table.getColumnList(); |
219 |
|
217 |
StringBuilder rawUpdateStmt = new StringBuilder(); |
220 |
StringBuilder rawUpdateStmt = new StringBuilder(); |
218 |
rawUpdateStmt.append("UPDATE ").append(tblMeta.getFullyQualifiedName(0, false)).append(" SET "); // NOI18N |
221 |
rawUpdateStmt.append("UPDATE ").append(table.getFullyQualifiedName(false)).append(" SET "); // NOI18N |
219 |
|
222 |
|
220 |
String commaStr = ", "; // NOI18N |
223 |
String commaStr = ", "; // NOI18N |
221 |
boolean comma = false; |
224 |
boolean comma = false; |
222 |
for (Integer col : changedRow.keySet()) { |
225 |
for (Integer col : changedRow.keySet()) { |
223 |
DBColumn dbcol = tblMeta.getColumn(col); |
226 |
DBColumn dbcol = columns.get(col); |
224 |
Object value = changedRow.get(col); |
227 |
Object value = changedRow.get(col); |
225 |
int type = dbcol.getJdbcType(); |
228 |
int type = dbcol.getJdbcType(); |
226 |
|
229 |
|
Lines 234-240
Link Here
|
234 |
comma = true; |
237 |
comma = true; |
235 |
} |
238 |
} |
236 |
|
239 |
|
237 |
rawUpdateStmt.append(tblMeta.getQualifiedName(col, true)); |
240 |
rawUpdateStmt.append(dbcol.getQualifiedName(true)); |
238 |
// Check for Constant e.g <NULL>, <DEFAULT>, <CURRENT_TIMESTAMP> etc |
241 |
// Check for Constant e.g <NULL>, <DEFAULT>, <CURRENT_TIMESTAMP> etc |
239 |
if (value != null && DataViewUtils.isSQLConstantString(value, dbcol)) { |
242 |
if (value != null && DataViewUtils.isSQLConstantString(value, dbcol)) { |
240 |
String constStr = ((String) value).substring(1, ((String) value).length() - 1); |
243 |
String constStr = ((String) value).substring(1, ((String) value).length() - 1); |
Lines 245-286
Link Here
|
245 |
} |
248 |
} |
246 |
|
249 |
|
247 |
rawUpdateStmt.append(" WHERE "); // NOI18N |
250 |
rawUpdateStmt.append(" WHERE "); // NOI18N |
248 |
generateWhereCondition(rawUpdateStmt, row, tblModel); |
251 |
generateWhereCondition(table, rawUpdateStmt, row, tblModel); |
249 |
return rawUpdateStmt.toString(); |
252 |
return rawUpdateStmt.toString(); |
250 |
} |
253 |
} |
251 |
|
254 |
|
252 |
String generateDeleteStatement(List<Integer> types, List<Object> values, int rowNum, DataViewTableUIModel tblModel) { |
255 |
String generateDeleteStatement(DBTable table, List<Integer> types, List<Object> values, int rowNum, DataViewTableUIModel tblModel) { |
253 |
StringBuilder deleteStmt = new StringBuilder(); |
256 |
StringBuilder deleteStmt = new StringBuilder(); |
254 |
deleteStmt.append("DELETE FROM ").append(tblMeta.getFullyQualifiedName(0, true)).append(" WHERE "); // NOI18N |
257 |
deleteStmt.append("DELETE FROM ").append(table.getFullyQualifiedName(true)).append(" WHERE "); // NOI18N |
255 |
|
258 |
|
256 |
generateWhereCondition(deleteStmt, types, values, rowNum, tblModel); |
259 |
generateWhereCondition(table, deleteStmt, types, values, rowNum, tblModel); |
257 |
return deleteStmt.toString(); |
260 |
return deleteStmt.toString(); |
258 |
} |
261 |
} |
259 |
|
262 |
|
260 |
String generateDeleteStatement(int rowNum, DataViewTableUIModel tblModel) { |
263 |
String generateDeleteStatement(DBTable table, int rowNum, DataViewTableUIModel tblModel) { |
261 |
StringBuilder rawDeleteStmt = new StringBuilder(); |
264 |
StringBuilder rawDeleteStmt = new StringBuilder(); |
262 |
rawDeleteStmt.append("DELETE FROM ").append(tblMeta.getFullyQualifiedName(0, false)).append(" WHERE "); // NOI18N |
265 |
rawDeleteStmt.append("DELETE FROM ").append(table.getFullyQualifiedName(false)).append(" WHERE "); // NOI18N |
263 |
|
266 |
|
264 |
generateWhereCondition(rawDeleteStmt, rowNum, tblModel); |
267 |
generateWhereCondition(table, rawDeleteStmt, rowNum, tblModel); |
265 |
return rawDeleteStmt.toString(); |
268 |
return rawDeleteStmt.toString(); |
266 |
} |
269 |
} |
267 |
|
270 |
|
268 |
// TODO: Support for FK, and other constraint and Index recreation. |
271 |
// TODO: Support for FK, and other constraint and Index recreation. |
269 |
String generateCreateStatement(DBTable table) throws DBException, Exception { |
272 |
String generateCreateStatement(DBTable table) throws DBException, Exception { |
270 |
|
|
|
271 |
Connection conn = DBConnectionFactory.getInstance().getConnection(dataView.getDatabaseConnection()); |
272 |
String msg = ""; |
273 |
if (conn == null) { |
274 |
Throwable ex = DBConnectionFactory.getInstance().getLastException(); |
275 |
if (ex != null) { |
276 |
msg = ex.getMessage(); |
277 |
} else { |
278 |
msg = NbBundle.getMessage(SQLExecutionHelper.class, "MSG_connection_failure", dataView.getDatabaseConnection()); |
279 |
} |
280 |
dataView.setErrorStatusText(new DBException(msg)); |
281 |
throw new DBException(msg); |
282 |
} |
283 |
|
284 |
boolean isdb2 = table.getParentObject().getDBType() == DBMetaDataFactory.DB2 ? true : false; |
273 |
boolean isdb2 = table.getParentObject().getDBType() == DBMetaDataFactory.DB2 ? true : false; |
285 |
|
274 |
|
286 |
StringBuilder sql = new StringBuilder(); |
275 |
StringBuilder sql = new StringBuilder(); |
Lines 346-367
Link Here
|
346 |
return sql.toString(); |
335 |
return sql.toString(); |
347 |
} |
336 |
} |
348 |
|
337 |
|
349 |
static String getCountSQLQuery(String queryString) { |
|
|
350 |
// User may type "FROM" in either lower, upper or mixed case |
351 |
String[] splitByFrom = queryString.toUpperCase().split("FROM"); // NOI18N |
352 |
queryString = queryString.substring(splitByFrom[0].length()); |
353 |
|
354 |
String[] splitByOrderBy = queryString.toUpperCase().split("ORDER BY"); // NOI18N |
355 |
queryString = queryString.substring(0, splitByOrderBy[0].length()); |
356 |
return "SELECT COUNT(*) " + queryString; // NOI18N |
357 |
} |
358 |
|
359 |
static String getCountAsSubQuery(String queryString) { |
360 |
String[] splitByOrderBy = queryString.toUpperCase().split("ORDER BY"); // NOI18N |
361 |
queryString = queryString.substring(0, splitByOrderBy[0].length()); |
362 |
return "SELECT COUNT(*) FROM (" + queryString + ") C2668"; // NOI18N |
363 |
} |
364 |
|
365 |
private boolean addSeparator(boolean and, StringBuilder sql, String sep) { |
338 |
private boolean addSeparator(boolean and, StringBuilder sql, String sep) { |
366 |
if (and) { |
339 |
if (and) { |
367 |
sql.append(sep); |
340 |
sql.append(sep); |
Lines 371-390
Link Here
|
371 |
} |
344 |
} |
372 |
} |
345 |
} |
373 |
|
346 |
|
374 |
private void generateNameValue(int i, StringBuilder sql, Object value, List<Object> values, List<Integer> types) { |
347 |
private void generateNameValue(DBColumn column, StringBuilder sql, Object value, List<Object> values, List<Integer> types) { |
375 |
sql.append(tblMeta.getQualifiedName(i, true)); |
348 |
sql.append(column.getQualifiedName(true)); |
376 |
if (value != null) { |
349 |
if (value != null) { |
377 |
values.add(value); |
350 |
values.add(value); |
378 |
types.add(tblMeta.getColumnType(i)); |
351 |
types.add(column.getJdbcType()); |
379 |
sql.append(" = ? "); // NOI18N |
352 |
sql.append(" = ? "); // NOI18N |
380 |
} else { // Handle NULL value in where condition |
353 |
} else { // Handle NULL value in where condition |
381 |
sql.append(" IS NULL "); // NOI18N |
354 |
sql.append(" IS NULL "); // NOI18N |
382 |
} |
355 |
} |
383 |
} |
356 |
} |
384 |
|
357 |
|
385 |
private void generateNameValue(int i, StringBuilder sql, Object value) { |
358 |
private void generateNameValue(DBColumn column, StringBuilder sql, Object value) { |
386 |
String columnName = tblMeta.getQualifiedName(i, false); |
359 |
String columnName = column.getQualifiedName(false); |
387 |
int type = tblMeta.getColumnType(i); |
360 |
int type = column.getJdbcType(); |
388 |
|
361 |
|
389 |
sql.append(columnName); |
362 |
sql.append(columnName); |
390 |
if (value != null) { |
363 |
if (value != null) { |
Lines 394-414
Link Here
|
394 |
} |
367 |
} |
395 |
} |
368 |
} |
396 |
|
369 |
|
397 |
private void generateWhereCondition(StringBuilder result, List<Integer> types, List<Object> values, int rowNum, DataViewTableUIModel model) { |
370 |
private void generateWhereCondition(DBTable table, StringBuilder result, List<Integer> types, List<Object> values, int rowNum, DataViewTableUIModel model) { |
398 |
DBPrimaryKey key = tblMeta.getTable(0).getPrimaryKey(); |
371 |
DBPrimaryKey key = table.getPrimaryKey(); |
399 |
boolean keySelected = false; |
372 |
boolean keySelected = false; |
400 |
boolean and = false; |
373 |
boolean and = false; |
401 |
|
374 |
|
|
|
375 |
List<DBColumn> columns = table.getColumnList(); |
376 |
|
402 |
if (key != null) { |
377 |
if (key != null) { |
403 |
for (String keyName : key.getColumnNames()) { |
378 |
for (String keyName : key.getColumnNames()) { |
404 |
for (int i = 0; i < model.getColumnCount(); i++) { |
379 |
for (int i = 0; i < model.getColumnCount(); i++) { |
405 |
String columnName = tblMeta.getColumnName(i); |
380 |
DBColumn dbcol = columns.get(i); |
|
|
381 |
String columnName = dbcol.getName(); |
406 |
if (columnName.equals(keyName)) { |
382 |
if (columnName.equals(keyName)) { |
407 |
Object val = model.getOriginalValueAt(rowNum, i); |
383 |
Object val = model.getOriginalValueAt(rowNum, i); |
408 |
if (val != null) { |
384 |
if (val != null) { |
409 |
keySelected = true; |
385 |
keySelected = true; |
410 |
and = addSeparator(and, result, " AND "); // NOI18N |
386 |
and = addSeparator(and, result, " AND "); // NOI18N |
411 |
generateNameValue(i, result, val, values, types); |
387 |
generateNameValue(dbcol, result, val, values, types); |
412 |
break; |
388 |
break; |
413 |
} |
389 |
} |
414 |
} |
390 |
} |
Lines 418-445
Link Here
|
418 |
|
394 |
|
419 |
if (key == null || !keySelected) { |
395 |
if (key == null || !keySelected) { |
420 |
for (int i = 0; i < model.getColumnCount(); i++) { |
396 |
for (int i = 0; i < model.getColumnCount(); i++) { |
|
|
397 |
DBColumn dbcol = columns.get(i); |
421 |
Object val = model.getOriginalValueAt(rowNum, i); |
398 |
Object val = model.getOriginalValueAt(rowNum, i); |
422 |
and = addSeparator(and, result, " AND "); // NOI18N |
399 |
and = addSeparator(and, result, " AND "); // NOI18N |
423 |
generateNameValue(i, result, val, values, types); |
400 |
generateNameValue(dbcol, result, val, values, types); |
424 |
} |
401 |
} |
425 |
} |
402 |
} |
426 |
} |
403 |
} |
427 |
|
404 |
|
428 |
private void generateWhereCondition(StringBuilder sql, int rowNum, DataViewTableUIModel model) { |
405 |
private void generateWhereCondition(DBTable table, StringBuilder sql, int rowNum, DataViewTableUIModel model) { |
429 |
DBPrimaryKey key = tblMeta.getTable(0).getPrimaryKey(); |
406 |
DBPrimaryKey key = table.getPrimaryKey(); |
430 |
boolean keySelected = false; |
407 |
boolean keySelected = false; |
431 |
boolean and = false; |
408 |
boolean and = false; |
|
|
409 |
|
410 |
List<DBColumn> columns = table.getColumnList(); |
432 |
|
411 |
|
433 |
if (key != null) { |
412 |
if (key != null) { |
434 |
for (String keyName : key.getColumnNames()) { |
413 |
for (String keyName : key.getColumnNames()) { |
435 |
for (int i = 0; i < model.getColumnCount(); i++) { |
414 |
for (int i = 0; i < model.getColumnCount(); i++) { |
436 |
String columnName = tblMeta.getColumnName(i); |
415 |
DBColumn dbcol = columns.get(i); |
|
|
416 |
String columnName = dbcol.getName(); |
437 |
if (columnName.equals(keyName)) { |
417 |
if (columnName.equals(keyName)) { |
438 |
Object val = model.getOriginalValueAt(rowNum, i); |
418 |
Object val = model.getOriginalValueAt(rowNum, i); |
439 |
if (val != null) { |
419 |
if (val != null) { |
440 |
keySelected = true; |
420 |
keySelected = true; |
441 |
and = addSeparator(and, sql, " AND "); // NOI18N |
421 |
and = addSeparator(and, sql, " AND "); // NOI18N |
442 |
generateNameValue(i, sql, val); |
422 |
generateNameValue(dbcol, sql, val); |
443 |
break; |
423 |
break; |
444 |
} |
424 |
} |
445 |
} |
425 |
} |
Lines 449-457
Link Here
|
449 |
|
429 |
|
450 |
if (key == null || !keySelected) { |
430 |
if (key == null || !keySelected) { |
451 |
for (int i = 0; i < model.getColumnCount(); i++) { |
431 |
for (int i = 0; i < model.getColumnCount(); i++) { |
|
|
432 |
DBColumn dbcol = columns.get(i); |
452 |
Object val = model.getOriginalValueAt(rowNum, i); |
433 |
Object val = model.getOriginalValueAt(rowNum, i); |
453 |
and = addSeparator(and, sql, " AND "); // NOI18N |
434 |
and = addSeparator(and, sql, " AND "); // NOI18N |
454 |
generateNameValue(i, sql, val); |
435 |
generateNameValue(dbcol, sql, val); |
455 |
} |
436 |
} |
456 |
} |
437 |
} |
457 |
} |
438 |
} |