Skip to content

Commit

Permalink
0004929: Fixed SQL explorer row editor (#155)
Browse files Browse the repository at this point in the history
  • Loading branch information
evan-miller-jumpmind committed Mar 30, 2021
1 parent 096d573 commit 22d4483
Showing 1 changed file with 44 additions and 13 deletions.
Expand Up @@ -46,6 +46,7 @@
import org.jumpmind.db.model.Reference;
import org.jumpmind.db.model.Table;
import org.jumpmind.db.platform.DatabaseInfo;
import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.db.platform.IDdlReader;
import org.jumpmind.db.sql.SqlException;
import org.jumpmind.properties.TypedProperties;
Expand Down Expand Up @@ -282,13 +283,31 @@ public void menuSelected(MenuItem selectedItem) {
}
String sql = buildUpdate(resultTable, colNames, resultTable.getPrimaryKeyColumnNames());
log.warn(sql);
Object[] allParams = ArrayUtils.addAll(params.toArray(), pkParams);
int[] allTypes = ArrayUtils.addAll(types.stream().mapToInt(val -> val).toArray(), pkTypes);
for (int k = 0; k < allTypes.length; k++) {
if (allTypes[k] == Types.DATE && db.getPlatform().getDdlBuilder().getDatabaseInfo()
.isDateOverridesToTimestamp()) {
allTypes[k] = Types.TIMESTAMP;
Object[] allParams;
int[] allTypes;
if (pkParams.length > 0) {
allParams = ArrayUtils.addAll(params.toArray(), pkParams);
allTypes = ArrayUtils.addAll(types.stream().mapToInt(val -> val).toArray(), pkTypes);
for (int k = 0; k < allTypes.length; k++) {
if (allTypes[k] == Types.DATE && db.getPlatform().getDdlBuilder().getDatabaseInfo()
.isDateOverridesToTimestamp()) {
allTypes[k] = Types.TIMESTAMP;
}
}
} else {
List<Object> requiredColParams = new ArrayList<Object>();
List<Integer> requiredColTypes = new ArrayList<Integer>();
for (int k = 0; k < unchangedValue[0].size(); k++) {
Object val = unchangedValue[0].get(k);
Column col = resultTable.getColumn(k);
if (col.isRequired() && db.getPlatform().canColumnBeUsedInWhereClause(col)) {
requiredColParams.add(val);
requiredColTypes.add(col.getMappedTypeCode());
}
}
allParams = ArrayUtils.addAll(params.toArray(), requiredColParams.toArray());
allTypes = ArrayUtils.addAll(types.stream().mapToInt(val -> val).toArray(),
requiredColTypes.stream().mapToInt(l -> l).toArray());
}
try {
db.getPlatform().getSqlTemplate().update(sql, allParams, allTypes);
Expand Down Expand Up @@ -783,8 +802,9 @@ protected String[] getColumnsToExclude() {

protected String buildUpdate(Table table, List<String> columnNames, String[] pkColumnNames) {
StringBuilder sql = new StringBuilder("update ");
DatabaseInfo dbInfo = db.getPlatform().getDatabaseInfo();
String quote = db.getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn() ? dbInfo.getDelimiterToken() : "";
IDatabasePlatform platform = db.getPlatform();
DatabaseInfo dbInfo = platform.getDatabaseInfo();
String quote = platform.getDdlBuilder().isDelimitedIdentifierModeOn() ? dbInfo.getDelimiterToken() : "";
sql.append(table.getQualifiedTableName(quote, dbInfo.getCatalogSeparator(), dbInfo.getSchemaSeparator()));
sql.append(" set ");
for (String col : columnNames) {
Expand All @@ -795,11 +815,22 @@ protected String buildUpdate(Table table, List<String> columnNames, String[] pkC
}
sql.delete(sql.length() - 2, sql.length());
sql.append(" where ");
for (String col : pkColumnNames) {
sql.append(quote);
sql.append(col);
sql.append(quote);
sql.append("=? and ");
if (pkColumnNames.length > 0) {
for (String col : pkColumnNames) {
sql.append(quote);
sql.append(col);
sql.append(quote);
sql.append("=? and ");
}
} else {
for (Column col : table.getColumns()) {
if (col.isRequired() && platform.canColumnBeUsedInWhereClause(col)) {
sql.append(quote);
sql.append(col.getName());
sql.append(quote);
sql.append("=? and ");
}
}
}
sql.delete(sql.length() - 5, sql.length());
return sql.toString();
Expand Down

0 comments on commit 22d4483

Please sign in to comment.