QQQ-14 feedback from code review

This commit is contained in:
2022-06-24 16:18:14 -05:00
parent 83786d97c3
commit ecd2736fe8
9 changed files with 34 additions and 29 deletions

View File

@ -51,7 +51,7 @@
<dependency> <dependency>
<groupId>com.kingsrook.qqq</groupId> <groupId>com.kingsrook.qqq</groupId>
<artifactId>qqq-backend-core</artifactId> <artifactId>qqq-backend-core</artifactId>
<version>0.0.0-20220623.193535-9</version> <version>0.0.0-20220624.210809-12</version>
</dependency> </dependency>
<!-- 3rd party deps specifically for this module --> <!-- 3rd party deps specifically for this module -->

View File

@ -69,7 +69,7 @@ public class RDBMSBackendModule implements QBackendModuleInterface
@Override @Override
public Class<? extends QTableBackendDetails> getTableBackendDetailsClass() public Class<? extends QTableBackendDetails> getTableBackendDetailsClass()
{ {
return RDBMSTableBackendDetails.class; return (RDBMSTableBackendDetails.class);
} }
@ -80,7 +80,7 @@ public class RDBMSBackendModule implements QBackendModuleInterface
@Override @Override
public QueryInterface getQueryInterface() public QueryInterface getQueryInterface()
{ {
return new RDBMSQueryAction(); return (new RDBMSQueryAction());
} }

View File

@ -22,20 +22,27 @@
package com.kingsrook.qqq.backend.module.rdbms.actions; package com.kingsrook.qqq.backend.module.rdbms.actions;
import java.sql.Connection;
import java.sql.SQLException;
import com.kingsrook.qqq.backend.core.model.actions.AbstractQTableRequest;
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
import com.kingsrook.qqq.backend.core.utils.StringUtils; import com.kingsrook.qqq.backend.core.utils.StringUtils;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDetails; import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDetails;
/******************************************************************************* /*******************************************************************************
** ** Base class for all core actions in the RDBMS module.
*******************************************************************************/ *******************************************************************************/
public abstract class AbstractRDBMSAction public abstract class AbstractRDBMSAction
{ {
/******************************************************************************* /*******************************************************************************
** Get the table name to use in the RDBMS from a QTableMetaData.
** **
** That is, table.backendDetails.tableName if set -- else, table.name
*******************************************************************************/ *******************************************************************************/
protected String getTableName(QTableMetaData table) protected String getTableName(QTableMetaData table)
{ {
@ -52,7 +59,9 @@ public abstract class AbstractRDBMSAction
/******************************************************************************* /*******************************************************************************
** Get the column name to use for a field in the RDBMS, from the fieldMetaData.
** **
** That is, field.backendName if set -- else, field.name
*******************************************************************************/ *******************************************************************************/
protected String getColumnName(QFieldMetaData field) protected String getColumnName(QFieldMetaData field)
{ {
@ -63,4 +72,14 @@ public abstract class AbstractRDBMSAction
return (field.getName()); return (field.getName());
} }
/*******************************************************************************
** Get a database connection, per the backend in the request.
*******************************************************************************/
protected Connection getConnection(AbstractQTableRequest qTableRequest) throws SQLException
{
ConnectionManager connectionManager = new ConnectionManager();
return connectionManager.getConnection((RDBMSBackendMetaData) qTableRequest.getBackend());
}
} }

View File

@ -33,9 +33,7 @@ import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult;
import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
import com.kingsrook.qqq.backend.core.modules.interfaces.DeleteInterface; import com.kingsrook.qqq.backend.core.modules.interfaces.DeleteInterface;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager; import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
/******************************************************************************* /*******************************************************************************
@ -67,9 +65,7 @@ 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
ConnectionManager connectionManager = new ConnectionManager(); Connection connection = getConnection(deleteRequest);
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData)deleteRequest.getBackend());
QueryManager.executeUpdateForRowCount(connection, sql, params); QueryManager.executeUpdateForRowCount(connection, sql, params);
List<QRecord> outputRecords = new ArrayList<>(); List<QRecord> outputRecords = new ArrayList<>();
rs.setRecords(outputRecords); rs.setRecords(outputRecords);

View File

@ -34,9 +34,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
import com.kingsrook.qqq.backend.core.modules.interfaces.InsertInterface; import com.kingsrook.qqq.backend.core.modules.interfaces.InsertInterface;
import com.kingsrook.qqq.backend.core.utils.CollectionUtils; import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager; import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
/******************************************************************************* /*******************************************************************************
@ -91,15 +89,13 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
// todo sql customization - can edit sql and/or param list // todo sql customization - can edit sql and/or param list
ConnectionManager connectionManager = new ConnectionManager();
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) insertRequest.getBackend());
// QueryResult rs = new QueryResult(); // QueryResult rs = new QueryResult();
// List<QRecord> records = new ArrayList<>(); // List<QRecord> records = new ArrayList<>();
// rs.setRecords(records); // rs.setRecords(records);
// 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);
List<Integer> idList = QueryManager.executeInsertForGeneratedIds(connection, sql.toString(), params); List<Integer> idList = QueryManager.executeInsertForGeneratedIds(connection, sql.toString(), params);
List<QRecord> outputRecords = new ArrayList<>(); List<QRecord> outputRecords = new ArrayList<>();
rs.setRecords(outputRecords); rs.setRecords(outputRecords);

View File

@ -44,9 +44,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.QFieldType;
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
import com.kingsrook.qqq.backend.core.modules.interfaces.QueryInterface; import com.kingsrook.qqq.backend.core.modules.interfaces.QueryInterface;
import com.kingsrook.qqq.backend.core.utils.CollectionUtils; import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager; import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
/******************************************************************************* /*******************************************************************************
@ -97,13 +95,11 @@ 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
ConnectionManager connectionManager = new ConnectionManager();
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) queryRequest.getBackend());
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);
QueryManager.executeStatement(connection, sql, ((ResultSet resultSet) -> QueryManager.executeStatement(connection, sql, ((ResultSet resultSet) ->
{ {
ResultSetMetaData metaData = resultSet.getMetaData(); ResultSetMetaData metaData = resultSet.getMetaData();

View File

@ -33,9 +33,7 @@ import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
import com.kingsrook.qqq.backend.core.modules.interfaces.UpdateInterface; import com.kingsrook.qqq.backend.core.modules.interfaces.UpdateInterface;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager; import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
/******************************************************************************* /*******************************************************************************
@ -51,7 +49,7 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
{ {
try try
{ {
UpdateResult rs = new UpdateResult(); UpdateResult rs = new UpdateResult();
QTableMetaData table = updateRequest.getTable(); QTableMetaData table = updateRequest.getTable();
List<QRecord> outputRecords = new ArrayList<>(); List<QRecord> outputRecords = new ArrayList<>();
@ -59,7 +57,8 @@ 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?
int recordIndex = 0; Connection connection = getConnection(updateRequest);
int recordIndex = 0;
for(QRecord record : updateRequest.getRecords()) for(QRecord record : updateRequest.getRecords())
{ {
List<QFieldMetaData> updateableFields = table.getFields().values().stream() List<QFieldMetaData> updateableFields = table.getFields().values().stream()
@ -78,9 +77,6 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
// todo sql customization - can edit sql and/or param list // todo sql customization - can edit sql and/or param list
ConnectionManager connectionManager = new ConnectionManager();
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) updateRequest.getBackend());
QRecord outputRecord = new QRecord(record); QRecord outputRecord = new QRecord(record);
outputRecords.add(outputRecord); outputRecords.add(outputRecord);
@ -92,6 +88,7 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
params.add(record.getValue(field.getName())); params.add(record.getValue(field.getName()));
} }
params.add(record.getValue(table.getPrimaryKeyField())); 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?
} }

View File

@ -27,7 +27,7 @@ import com.kingsrook.qqq.backend.module.rdbms.RDBMSBackendModule;
/******************************************************************************* /*******************************************************************************
** ** Meta-data to provide details of an RDBMS backend (e.g., connection params)
*******************************************************************************/ *******************************************************************************/
public class RDBMSBackendMetaData extends QBackendMetaData public class RDBMSBackendMetaData extends QBackendMetaData
{ {

View File

@ -72,7 +72,7 @@ public class TestUtils
public static QTableMetaData defineTablePerson() public static QTableMetaData defineTablePerson()
{ {
return new QTableMetaData() return new QTableMetaData()
.withName("a-person") .withName("a-person") // use this name, so it isn't the same as the actual database-table name (which must come from the backend details)
.withLabel("Person") .withLabel("Person")
.withBackendName(defineBackend().getName()) .withBackendName(defineBackend().getName())
.withPrimaryKeyField("id") .withPrimaryKeyField("id")
@ -83,7 +83,8 @@ public class TestUtils
.withField(new QFieldMetaData("lastName", QFieldType.STRING).withBackendName("last_name")) .withField(new QFieldMetaData("lastName", QFieldType.STRING).withBackendName("last_name"))
.withField(new QFieldMetaData("birthDate", QFieldType.DATE).withBackendName("birth_date")) .withField(new QFieldMetaData("birthDate", QFieldType.DATE).withBackendName("birth_date"))
.withField(new QFieldMetaData("email", QFieldType.STRING)) .withField(new QFieldMetaData("email", QFieldType.STRING))
.withBackendDetails(new RDBMSTableBackendDetails().withTableName("person")); .withBackendDetails(new RDBMSTableBackendDetails()
.withTableName("person"));
} }
} }