From ecd2736fe84ca80bb6235f0dcd282ea3d112cfd2 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 24 Jun 2022 16:18:14 -0500 Subject: [PATCH] QQQ-14 feedback from code review --- pom.xml | 2 +- .../module/rdbms/RDBMSBackendModule.java | 4 ++-- .../rdbms/actions/AbstractRDBMSAction.java | 21 ++++++++++++++++++- .../rdbms/actions/RDBMSDeleteAction.java | 6 +----- .../rdbms/actions/RDBMSInsertAction.java | 6 +----- .../rdbms/actions/RDBMSQueryAction.java | 6 +----- .../rdbms/actions/RDBMSUpdateAction.java | 11 ++++------ .../model/metadata/RDBMSBackendMetaData.java | 2 +- .../qqq/backend/module/rdbms/TestUtils.java | 5 +++-- 9 files changed, 34 insertions(+), 29 deletions(-) diff --git a/pom.xml b/pom.xml index 03908b1e..7e09c774 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ com.kingsrook.qqq qqq-backend-core - 0.0.0-20220623.193535-9 + 0.0.0-20220624.210809-12 diff --git a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/RDBMSBackendModule.java b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/RDBMSBackendModule.java index d2b00152..752b53c9 100644 --- a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/RDBMSBackendModule.java +++ b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/RDBMSBackendModule.java @@ -69,7 +69,7 @@ public class RDBMSBackendModule implements QBackendModuleInterface @Override public Class 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()); } diff --git a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/AbstractRDBMSAction.java b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/AbstractRDBMSAction.java index d3c7b861..366fa44c 100644 --- a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/AbstractRDBMSAction.java +++ b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/AbstractRDBMSAction.java @@ -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()); + } } diff --git a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSDeleteAction.java b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSDeleteAction.java index 64560aa2..3495a621 100644 --- a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSDeleteAction.java +++ b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSDeleteAction.java @@ -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 outputRecords = new ArrayList<>(); rs.setRecords(outputRecords); diff --git a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSInsertAction.java b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSInsertAction.java index e8408aef..74b83a8f 100644 --- a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSInsertAction.java +++ b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSInsertAction.java @@ -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 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 idList = QueryManager.executeInsertForGeneratedIds(connection, sql.toString(), params); List outputRecords = new ArrayList<>(); rs.setRecords(outputRecords); diff --git a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryAction.java b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryAction.java index 8573a621..67837e73 100644 --- a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryAction.java +++ b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryAction.java @@ -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 records = new ArrayList<>(); rs.setRecords(records); + Connection connection = getConnection(queryRequest); QueryManager.executeStatement(connection, sql, ((ResultSet resultSet) -> { ResultSetMetaData metaData = resultSet.getMetaData(); diff --git a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSUpdateAction.java b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSUpdateAction.java index 12d48e56..6bd0a720 100644 --- a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSUpdateAction.java +++ b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSUpdateAction.java @@ -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 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 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? } diff --git a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/model/metadata/RDBMSBackendMetaData.java b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/model/metadata/RDBMSBackendMetaData.java index 7aac5d44..e5fa34bb 100644 --- a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/model/metadata/RDBMSBackendMetaData.java +++ b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/model/metadata/RDBMSBackendMetaData.java @@ -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 { diff --git a/src/test/java/com/kingsrook/qqq/backend/module/rdbms/TestUtils.java b/src/test/java/com/kingsrook/qqq/backend/module/rdbms/TestUtils.java index 347bbf9e..1e9596db 100644 --- a/src/test/java/com/kingsrook/qqq/backend/module/rdbms/TestUtils.java +++ b/src/test/java/com/kingsrook/qqq/backend/module/rdbms/TestUtils.java @@ -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")); } }