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