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>
<groupId>com.kingsrook.qqq</groupId>
<artifactId>qqq-backend-core</artifactId>
<version>0.0.0-20220623.193535-9</version>
<version>0.0.0-20220624.210809-12</version>
</dependency>
<!-- 3rd party deps specifically for this module -->

View File

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

View File

@ -22,20 +22,27 @@
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.QTableMetaData;
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;
/*******************************************************************************
**
** Base class for all core actions in the RDBMS module.
*******************************************************************************/
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)
{
@ -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)
{
@ -63,4 +72,14 @@ public abstract class AbstractRDBMSAction
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.metadata.QTableMetaData;
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.model.metadata.RDBMSBackendMetaData;
/*******************************************************************************
@ -67,9 +65,7 @@ public class RDBMSDeleteAction extends AbstractRDBMSAction implements DeleteInte
// todo sql customization - can edit sql and/or param list
ConnectionManager connectionManager = new ConnectionManager();
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData)deleteRequest.getBackend());
Connection connection = getConnection(deleteRequest);
QueryManager.executeUpdateForRowCount(connection, sql, params);
List<QRecord> outputRecords = new ArrayList<>();
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.modules.interfaces.InsertInterface;
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.model.metadata.RDBMSBackendMetaData;
/*******************************************************************************
@ -91,15 +89,13 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
// 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();
// List<QRecord> records = new ArrayList<>();
// rs.setRecords(records);
// 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);

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.modules.interfaces.QueryInterface;
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.model.metadata.RDBMSBackendMetaData;
/*******************************************************************************
@ -97,13 +95,11 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf
// 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();
List<QRecord> records = new ArrayList<>();
rs.setRecords(records);
Connection connection = getConnection(queryRequest);
QueryManager.executeStatement(connection, sql, ((ResultSet resultSet) ->
{
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.QTableMetaData;
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.model.metadata.RDBMSBackendMetaData;
/*******************************************************************************
@ -51,7 +49,7 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
{
try
{
UpdateResult rs = new UpdateResult();
UpdateResult rs = new UpdateResult();
QTableMetaData table = updateRequest.getTable();
List<QRecord> outputRecords = new ArrayList<>();
@ -59,7 +57,8 @@ 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?
int recordIndex = 0;
Connection connection = getConnection(updateRequest);
int recordIndex = 0;
for(QRecord record : updateRequest.getRecords())
{
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
ConnectionManager connectionManager = new ConnectionManager();
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) updateRequest.getBackend());
QRecord outputRecord = new QRecord(record);
outputRecords.add(outputRecord);
@ -92,6 +88,7 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
params.add(record.getValue(field.getName()));
}
params.add(record.getValue(table.getPrimaryKeyField()));
QueryManager.executeUpdate(connection, sql.toString(), params);
// 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
{

View File

@ -72,7 +72,7 @@ public class TestUtils
public static QTableMetaData defineTablePerson()
{
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")
.withBackendName(defineBackend().getName())
.withPrimaryKeyField("id")
@ -83,7 +83,8 @@ public class TestUtils
.withField(new QFieldMetaData("lastName", QFieldType.STRING).withBackendName("last_name"))
.withField(new QFieldMetaData("birthDate", QFieldType.DATE).withBackendName("birth_date"))
.withField(new QFieldMetaData("email", QFieldType.STRING))
.withBackendDetails(new RDBMSTableBackendDetails().withTableName("person"));
.withBackendDetails(new RDBMSTableBackendDetails()
.withTableName("person"));
}
}