QQQ-16 updated for changes to qqq-backend-core

This commit is contained in:
2022-06-23 14:39:55 -05:00
parent 8758093577
commit 83786d97c3
7 changed files with 29 additions and 30 deletions

View File

@ -38,7 +38,7 @@ import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDe
/*******************************************************************************
**
** QQQ Backend module for working with Relational Databases (RDBMS's).
*******************************************************************************/
public class RDBMSBackendModule implements QBackendModuleInterface
{

View File

@ -31,7 +31,6 @@ import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteRequest;
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.QRecordWithStatus;
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;
@ -72,14 +71,14 @@ public class RDBMSDeleteAction extends AbstractRDBMSAction implements DeleteInte
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData)deleteRequest.getBackend());
QueryManager.executeUpdateForRowCount(connection, sql, params);
List<QRecordWithStatus> recordsWithStatus = new ArrayList<>();
rs.setRecords(recordsWithStatus);
List<QRecord> outputRecords = new ArrayList<>();
rs.setRecords(outputRecords);
for(Serializable primaryKey : deleteRequest.getPrimaryKeys())
{
QRecord qRecord = new QRecord().withTableName(deleteRequest.getTableName()).withValue("id", primaryKey);
// todo uh, identify any errors?
QRecordWithStatus recordWithStatus = new QRecordWithStatus(qRecord);
recordsWithStatus.add(recordWithStatus);
QRecord outputRecord = new QRecord(qRecord);
outputRecords.add(outputRecord);
}
return rs;

View File

@ -30,10 +30,10 @@ import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertRequest;
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertResult;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
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;
@ -50,6 +50,11 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
*******************************************************************************/
public InsertResult execute(InsertRequest insertRequest) throws QException
{
if(CollectionUtils.nullSafeIsEmpty(insertRequest.getRecords()))
{
throw (new QException("Request to insert 0 records."));
}
try
{
InsertResult rs = new InsertResult();
@ -96,15 +101,15 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
// todo - non-serial-id style tables
// todo - other generated values, e.g., createDate... maybe need to re-select?
List<Integer> idList = QueryManager.executeInsertForGeneratedIds(connection, sql.toString(), params);
List<QRecordWithStatus> recordsWithStatus = new ArrayList<>();
rs.setRecords(recordsWithStatus);
List<QRecord> outputRecords = new ArrayList<>();
rs.setRecords(outputRecords);
int index = 0;
for(QRecord record : insertRequest.getRecords())
{
Integer id = idList.get(index++);
QRecordWithStatus recordWithStatus = new QRecordWithStatus(record);
recordWithStatus.setValue(table.getPrimaryKeyField(), id);
recordsWithStatus.add(recordWithStatus);
QRecord outputRecord = new QRecord(record);
outputRecord.setValue(table.getPrimaryKeyField(), id);
outputRecords.add(outputRecord);
}
return rs;

View File

@ -30,7 +30,6 @@ import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateRequest;
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateResult;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
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;
@ -55,8 +54,8 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
UpdateResult rs = new UpdateResult();
QTableMetaData table = updateRequest.getTable();
List<QRecordWithStatus> recordsWithStatus = new ArrayList<>();
rs.setRecords(recordsWithStatus);
List<QRecord> outputRecords = new ArrayList<>();
rs.setRecords(outputRecords);
// todo - sql batch for performance
// todo - if setting a bunch of records to have the same value, a single update where id IN?
@ -82,8 +81,8 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
ConnectionManager connectionManager = new ConnectionManager();
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) updateRequest.getBackend());
QRecordWithStatus recordWithStatus = new QRecordWithStatus(record);
recordsWithStatus.add(recordWithStatus);
QRecord outputRecord = new QRecord(record);
outputRecords.add(outputRecord);
try
{
@ -98,7 +97,8 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
}
catch(Exception e)
{
recordWithStatus.setErrors(new ArrayList<>(List.of(e)));
// todo - how to communicate errors??? outputRecord.setErrors(new ArrayList<>(List.of(e)));
throw new QException("Error executing update: " + e.getMessage(), e);
}
}

View File

@ -25,7 +25,6 @@ package com.kingsrook.qqq.backend.module.rdbms.actions;
import java.util.List;
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteRequest;
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult;
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@ -61,7 +60,7 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
deleteRequest.setPrimaryKeys(List.of(1, 2, 3, 4, 5));
DeleteResult deleteResult = new RDBMSDeleteAction().execute(deleteRequest);
assertEquals(5, deleteResult.getRecords().size(), "Unfiltered delete should return all rows");
assertTrue(deleteResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
// todo - add errors to QRecord? assertTrue(deleteResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
runTestSql("SELECT id FROM person", (rs -> assertFalse(rs.next())));
}
@ -77,7 +76,7 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
deleteRequest.setPrimaryKeys(List.of(1));
DeleteResult deleteResult = new RDBMSDeleteAction().execute(deleteRequest);
assertEquals(1, deleteResult.getRecords().size(), "Should delete one row");
assertTrue(deleteResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
// todo - add errors to QRecord? assertTrue(deleteResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
runTestSql("SELECT id FROM person WHERE id = 1", (rs -> assertFalse(rs.next())));
}
@ -93,7 +92,7 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
deleteRequest.setPrimaryKeys(List.of(1, 3, 5));
DeleteResult deleteResult = new RDBMSDeleteAction().execute(deleteRequest);
assertEquals(3, deleteResult.getRecords().size(), "Should delete one row");
assertTrue(deleteResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
// todo - add errors to QRecord? assertTrue(deleteResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
runTestSql("SELECT id FROM person", (rs -> {
int rowsFound = 0;
while(rs.next())

View File

@ -26,13 +26,11 @@ import java.util.List;
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertRequest;
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertResult;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
/*******************************************************************************
@ -68,7 +66,7 @@ public class RDBMSInsertActionTest extends RDBMSActionTest
InsertResult insertResult = new RDBMSInsertAction().execute(insertRequest);
assertEquals(1, insertResult.getRecords().size(), "Should return 1 row");
assertNotNull(insertResult.getRecords().get(0).getValue("id"), "Should have an id in the row");
assertTrue(insertResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
// todo - add errors to QRecord? assertTrue(insertResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
runTestSql("SELECT * FROM person WHERE last_name = 'Kirk'", (rs -> {
int rowsFound = 0;
while(rs.next())
@ -105,7 +103,7 @@ public class RDBMSInsertActionTest extends RDBMSActionTest
assertEquals(2, insertResult.getRecords().size(), "Should return 1 row");
assertEquals(6, insertResult.getRecords().get(0).getValue("id"), "Should have next id in the row");
assertEquals(7, insertResult.getRecords().get(1).getValue("id"), "Should have next id in the row");
assertTrue(insertResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
// todo - add errors to QRecord? assertTrue(insertResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
runTestSql("SELECT * FROM person WHERE last_name = 'Picard'", (rs -> {
int rowsFound = 0;
while(rs.next())

View File

@ -26,13 +26,11 @@ import java.util.List;
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateRequest;
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateResult;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@ -70,7 +68,7 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
UpdateResult updateResult = new RDBMSUpdateAction().execute(updateRequest);
assertEquals(1, updateResult.getRecords().size(), "Should return 1 row");
assertEquals(2, updateResult.getRecords().get(0).getValue("id"), "Should have id=2 in the row");
assertTrue(updateResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
// todo - add errors to QRecord? assertTrue(updateResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
runTestSql("SELECT * FROM person WHERE last_name = 'Kirk'", (rs -> {
int rowsFound = 0;
while(rs.next())
@ -115,7 +113,7 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
assertEquals(2, updateResult.getRecords().size(), "Should return 2 rows");
assertEquals(1, updateResult.getRecords().get(0).getValue("id"), "Should have expected ids in the row");
assertEquals(3, updateResult.getRecords().get(1).getValue("id"), "Should have expected ids in the row");
assertTrue(updateResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
// todo - add errors to QRecord? assertTrue(updateResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
runTestSql("SELECT * FROM person WHERE last_name = 'From Bewitched'", (rs -> {
int rowsFound = 0;
while(rs.next())