mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
open all connections inside try-with-resources
This commit is contained in:
@ -65,16 +65,18 @@ public class RDBMSDeleteAction extends AbstractRDBMSAction implements DeleteInte
|
||||
|
||||
// todo sql customization - can edit sql and/or param list
|
||||
|
||||
Connection connection = getConnection(deleteRequest);
|
||||
QueryManager.executeUpdateForRowCount(connection, sql, params);
|
||||
List<QRecord> outputRecords = new ArrayList<>();
|
||||
rs.setRecords(outputRecords);
|
||||
for(Serializable primaryKey : deleteRequest.getPrimaryKeys())
|
||||
try(Connection connection = getConnection(deleteRequest))
|
||||
{
|
||||
QRecord qRecord = new QRecord().withTableName(deleteRequest.getTableName()).withValue("id", primaryKey);
|
||||
// todo uh, identify any errors?
|
||||
QRecord outputRecord = new QRecord(qRecord);
|
||||
outputRecords.add(outputRecord);
|
||||
QueryManager.executeUpdateForRowCount(connection, sql, params);
|
||||
List<QRecord> outputRecords = new ArrayList<>();
|
||||
rs.setRecords(outputRecords);
|
||||
for(Serializable primaryKey : deleteRequest.getPrimaryKeys())
|
||||
{
|
||||
QRecord qRecord = new QRecord().withTableName(deleteRequest.getTableName()).withValue("id", primaryKey);
|
||||
// todo uh, identify any errors?
|
||||
QRecord outputRecord = new QRecord(qRecord);
|
||||
outputRecords.add(outputRecord);
|
||||
}
|
||||
}
|
||||
|
||||
return rs;
|
||||
|
@ -99,17 +99,19 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
|
||||
|
||||
// todo - non-serial-id style tables
|
||||
// todo - other generated values, e.g., createDate... maybe need to re-select?
|
||||
Connection connection = getConnection(insertRequest);
|
||||
List<Integer> idList = QueryManager.executeInsertForGeneratedIds(connection, sql.toString(), params);
|
||||
List<QRecord> outputRecords = new ArrayList<>();
|
||||
rs.setRecords(outputRecords);
|
||||
int index = 0;
|
||||
for(QRecord record : insertRequest.getRecords())
|
||||
try(Connection connection = getConnection(insertRequest))
|
||||
{
|
||||
Integer id = idList.get(index++);
|
||||
QRecord outputRecord = new QRecord(record);
|
||||
outputRecord.setValue(table.getPrimaryKeyField(), id);
|
||||
outputRecords.add(outputRecord);
|
||||
List<Integer> idList = QueryManager.executeInsertForGeneratedIds(connection, sql.toString(), params);
|
||||
List<QRecord> outputRecords = new ArrayList<>();
|
||||
rs.setRecords(outputRecords);
|
||||
int index = 0;
|
||||
for(QRecord record : insertRequest.getRecords())
|
||||
{
|
||||
Integer id = idList.get(index++);
|
||||
QRecord outputRecord = new QRecord(record);
|
||||
outputRecord.setValue(table.getPrimaryKeyField(), id);
|
||||
outputRecords.add(outputRecord);
|
||||
}
|
||||
}
|
||||
|
||||
return rs;
|
||||
|
@ -56,6 +56,8 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
{
|
||||
private static final Logger LOG = LogManager.getLogger(RDBMSQueryAction.class);
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
*******************************************************************************/
|
||||
@ -63,8 +65,8 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
{
|
||||
try
|
||||
{
|
||||
QTableMetaData table = queryRequest.getTable();
|
||||
String tableName = getTableName(table);
|
||||
QTableMetaData table = queryRequest.getTable();
|
||||
String tableName = getTableName(table);
|
||||
|
||||
List<QFieldMetaData> fieldList = new ArrayList<>(table.getFields().values());
|
||||
String columns = fieldList.stream()
|
||||
@ -73,7 +75,7 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
|
||||
String sql = "SELECT " + columns + " FROM " + tableName;
|
||||
|
||||
QQueryFilter filter = queryRequest.getFilter();
|
||||
QQueryFilter filter = queryRequest.getFilter();
|
||||
List<Serializable> params = new ArrayList<>();
|
||||
if(filter != null && CollectionUtils.nullSafeHasContents(filter.getCriteria()))
|
||||
{
|
||||
@ -98,33 +100,35 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
|
||||
// todo sql customization - can edit sql and/or param list
|
||||
|
||||
QueryResult rs = new QueryResult();
|
||||
QueryResult rs = new QueryResult();
|
||||
List<QRecord> records = new ArrayList<>();
|
||||
rs.setRecords(records);
|
||||
|
||||
Connection connection = getConnection(queryRequest);
|
||||
QueryManager.executeStatement(connection, sql, ((ResultSet resultSet) ->
|
||||
try(Connection connection = getConnection(queryRequest))
|
||||
{
|
||||
ResultSetMetaData metaData = resultSet.getMetaData();
|
||||
while(resultSet.next())
|
||||
QueryManager.executeStatement(connection, sql, ((ResultSet resultSet) ->
|
||||
{
|
||||
// todo - should refactor this for view etc to use too.
|
||||
// todo - Add display values (String labels for possibleValues, formatted #'s, etc)
|
||||
QRecord record = new QRecord();
|
||||
records.add(record);
|
||||
record.setTableName(table.getName());
|
||||
LinkedHashMap<String, Serializable> values = new LinkedHashMap<>();
|
||||
record.setValues(values);
|
||||
|
||||
for(int i = 1; i <= metaData.getColumnCount(); i++)
|
||||
ResultSetMetaData metaData = resultSet.getMetaData();
|
||||
while(resultSet.next())
|
||||
{
|
||||
QFieldMetaData qFieldMetaData = fieldList.get(i - 1);
|
||||
Serializable value = getValue(qFieldMetaData, resultSet, i);
|
||||
values.put(qFieldMetaData.getName(), value);
|
||||
}
|
||||
}
|
||||
// todo - should refactor this for view etc to use too.
|
||||
// todo - Add display values (String labels for possibleValues, formatted #'s, etc)
|
||||
QRecord record = new QRecord();
|
||||
records.add(record);
|
||||
record.setTableName(table.getName());
|
||||
LinkedHashMap<String, Serializable> values = new LinkedHashMap<>();
|
||||
record.setValues(values);
|
||||
|
||||
}), params);
|
||||
for(int i = 1; i <= metaData.getColumnCount(); i++)
|
||||
{
|
||||
QFieldMetaData qFieldMetaData = fieldList.get(i - 1);
|
||||
Serializable value = getValue(qFieldMetaData, resultSet, i);
|
||||
values.put(qFieldMetaData.getName(), value);
|
||||
}
|
||||
}
|
||||
|
||||
}), params);
|
||||
}
|
||||
|
||||
return rs;
|
||||
}
|
||||
@ -185,11 +189,11 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
List<String> clauses = new ArrayList<>();
|
||||
for(QFilterCriteria criterion : criteria)
|
||||
{
|
||||
QFieldMetaData field = table.getField(criterion.getFieldName());
|
||||
List<Serializable> values = criterion.getValues() == null ? new ArrayList<>() : new ArrayList<>(criterion.getValues());
|
||||
String column = getColumnName(field);
|
||||
String clause = column;
|
||||
Integer expectedNoOfParams = null;
|
||||
QFieldMetaData field = table.getField(criterion.getFieldName());
|
||||
List<Serializable> values = criterion.getValues() == null ? new ArrayList<>() : new ArrayList<>(criterion.getValues());
|
||||
String column = getColumnName(field);
|
||||
String clause = column;
|
||||
Integer expectedNoOfParams = null;
|
||||
switch(criterion.getOperator())
|
||||
{
|
||||
case EQUALS:
|
||||
@ -366,8 +370,8 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
|
||||
|
||||
for(QFilterOrderBy orderBy : orderBys)
|
||||
{
|
||||
QFieldMetaData field = table.getField(orderBy.getFieldName());
|
||||
String column = getColumnName(field);
|
||||
QFieldMetaData field = table.getField(orderBy.getFieldName());
|
||||
String column = getColumnName(field);
|
||||
clauses.add(column + " " + (orderBy.getIsAscending() ? "ASC" : "DESC"));
|
||||
}
|
||||
return (String.join(", ", clauses));
|
||||
|
@ -58,47 +58,49 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
|
||||
|
||||
// todo - sql batch for performance
|
||||
// todo - if setting a bunch of records to have the same value, a single update where id IN?
|
||||
Connection connection = getConnection(updateRequest);
|
||||
int recordIndex = 0;
|
||||
for(QRecord record : updateRequest.getRecords())
|
||||
try(Connection connection = getConnection(updateRequest))
|
||||
{
|
||||
List<QFieldMetaData> updateableFields = table.getFields().values().stream()
|
||||
.filter(field -> !field.getName().equals("id")) // todo - intent here is to avoid non-updateable fields.
|
||||
.filter(field -> record.getValues().containsKey(field.getName()))
|
||||
.toList();
|
||||
|
||||
String columns = updateableFields.stream()
|
||||
.map(f -> this.getColumnName(f) + " = ?")
|
||||
.collect(Collectors.joining(", "));
|
||||
|
||||
String tableName = getTableName(table);
|
||||
StringBuilder sql = new StringBuilder("UPDATE ").append(tableName)
|
||||
.append(" SET ").append(columns)
|
||||
.append(" WHERE ").append(getColumnName(table.getField(table.getPrimaryKeyField()))).append(" = ?");
|
||||
|
||||
// todo sql customization - can edit sql and/or param list
|
||||
|
||||
QRecord outputRecord = new QRecord(record);
|
||||
outputRecords.add(outputRecord);
|
||||
|
||||
try
|
||||
int recordIndex = 0;
|
||||
for(QRecord record : updateRequest.getRecords())
|
||||
{
|
||||
List<Object> params = new ArrayList<>();
|
||||
for(QFieldMetaData field : updateableFields)
|
||||
List<QFieldMetaData> updateableFields = table.getFields().values().stream()
|
||||
.filter(field -> !field.getName().equals("id")) // todo - intent here is to avoid non-updateable fields.
|
||||
.filter(field -> record.getValues().containsKey(field.getName()))
|
||||
.toList();
|
||||
|
||||
String columns = updateableFields.stream()
|
||||
.map(f -> this.getColumnName(f) + " = ?")
|
||||
.collect(Collectors.joining(", "));
|
||||
|
||||
String tableName = getTableName(table);
|
||||
StringBuilder sql = new StringBuilder("UPDATE ").append(tableName)
|
||||
.append(" SET ").append(columns)
|
||||
.append(" WHERE ").append(getColumnName(table.getField(table.getPrimaryKeyField()))).append(" = ?");
|
||||
|
||||
// todo sql customization - can edit sql and/or param list
|
||||
|
||||
QRecord outputRecord = new QRecord(record);
|
||||
outputRecords.add(outputRecord);
|
||||
|
||||
try
|
||||
{
|
||||
Serializable value = record.getValue(field.getName());
|
||||
value = scrubValue(field, value);
|
||||
params.add(value);
|
||||
}
|
||||
params.add(record.getValue(table.getPrimaryKeyField()));
|
||||
List<Object> params = new ArrayList<>();
|
||||
for(QFieldMetaData field : updateableFields)
|
||||
{
|
||||
Serializable value = record.getValue(field.getName());
|
||||
value = scrubValue(field, value);
|
||||
params.add(value);
|
||||
}
|
||||
params.add(record.getValue(table.getPrimaryKeyField()));
|
||||
|
||||
QueryManager.executeUpdate(connection, sql.toString(), params);
|
||||
// todo - auto-updated values, e.g., modifyDate... maybe need to re-select?
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
// todo - how to communicate errors??? outputRecord.setErrors(new ArrayList<>(List.of(e)));
|
||||
throw new QException("Error executing update: " + e.getMessage(), e);
|
||||
QueryManager.executeUpdate(connection, sql.toString(), params);
|
||||
// todo - auto-updated values, e.g., modifyDate... maybe need to re-select?
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
// todo - how to communicate errors??? outputRecord.setErrors(new ArrayList<>(List.of(e)));
|
||||
throw new QException("Error executing update: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user