mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
QQQ-14 feedback from code review
This commit is contained in:
2
pom.xml
2
pom.xml
@ -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 -->
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -59,6 +57,7 @@ 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);
|
||||||
int recordIndex = 0;
|
int recordIndex = 0;
|
||||||
for(QRecord record : updateRequest.getRecords())
|
for(QRecord record : updateRequest.getRecords())
|
||||||
{
|
{
|
||||||
@ -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?
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user