mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 05:01:07 +00:00
QQQ-14 feedback from code review
This commit is contained in:
2
pom.xml
2
pom.xml
@ -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 -->
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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?
|
||||
}
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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"));
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user