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 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());
}
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"));
}
}