mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
QQQ-16 updated for changes to qqq-backend-core
This commit is contained in:
@ -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
|
public class RDBMSBackendModule implements QBackendModuleInterface
|
||||||
{
|
{
|
||||||
|
@ -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.DeleteRequest;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult;
|
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.data.QRecordWithStatus;
|
|
||||||
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.ConnectionManager;
|
||||||
@ -72,14 +71,14 @@ public class RDBMSDeleteAction extends AbstractRDBMSAction implements DeleteInte
|
|||||||
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData)deleteRequest.getBackend());
|
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData)deleteRequest.getBackend());
|
||||||
|
|
||||||
QueryManager.executeUpdateForRowCount(connection, sql, params);
|
QueryManager.executeUpdateForRowCount(connection, sql, params);
|
||||||
List<QRecordWithStatus> recordsWithStatus = new ArrayList<>();
|
List<QRecord> outputRecords = new ArrayList<>();
|
||||||
rs.setRecords(recordsWithStatus);
|
rs.setRecords(outputRecords);
|
||||||
for(Serializable primaryKey : deleteRequest.getPrimaryKeys())
|
for(Serializable primaryKey : deleteRequest.getPrimaryKeys())
|
||||||
{
|
{
|
||||||
QRecord qRecord = new QRecord().withTableName(deleteRequest.getTableName()).withValue("id", primaryKey);
|
QRecord qRecord = new QRecord().withTableName(deleteRequest.getTableName()).withValue("id", primaryKey);
|
||||||
// todo uh, identify any errors?
|
// todo uh, identify any errors?
|
||||||
QRecordWithStatus recordWithStatus = new QRecordWithStatus(qRecord);
|
QRecord outputRecord = new QRecord(qRecord);
|
||||||
recordsWithStatus.add(recordWithStatus);
|
outputRecords.add(outputRecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rs;
|
return rs;
|
||||||
|
@ -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.InsertRequest;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertResult;
|
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.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.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.module.rdbms.jdbc.ConnectionManager;
|
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;
|
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
|
public InsertResult execute(InsertRequest insertRequest) throws QException
|
||||||
{
|
{
|
||||||
|
if(CollectionUtils.nullSafeIsEmpty(insertRequest.getRecords()))
|
||||||
|
{
|
||||||
|
throw (new QException("Request to insert 0 records."));
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
InsertResult rs = new InsertResult();
|
InsertResult rs = new InsertResult();
|
||||||
@ -96,15 +101,15 @@ public class RDBMSInsertAction extends AbstractRDBMSAction implements InsertInte
|
|||||||
// 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?
|
||||||
List<Integer> idList = QueryManager.executeInsertForGeneratedIds(connection, sql.toString(), params);
|
List<Integer> idList = QueryManager.executeInsertForGeneratedIds(connection, sql.toString(), params);
|
||||||
List<QRecordWithStatus> recordsWithStatus = new ArrayList<>();
|
List<QRecord> outputRecords = new ArrayList<>();
|
||||||
rs.setRecords(recordsWithStatus);
|
rs.setRecords(outputRecords);
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for(QRecord record : insertRequest.getRecords())
|
for(QRecord record : insertRequest.getRecords())
|
||||||
{
|
{
|
||||||
Integer id = idList.get(index++);
|
Integer id = idList.get(index++);
|
||||||
QRecordWithStatus recordWithStatus = new QRecordWithStatus(record);
|
QRecord outputRecord = new QRecord(record);
|
||||||
recordWithStatus.setValue(table.getPrimaryKeyField(), id);
|
outputRecord.setValue(table.getPrimaryKeyField(), id);
|
||||||
recordsWithStatus.add(recordWithStatus);
|
outputRecords.add(outputRecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rs;
|
return rs;
|
||||||
|
@ -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.UpdateRequest;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateResult;
|
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.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.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;
|
||||||
@ -55,8 +54,8 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
|
|||||||
UpdateResult rs = new UpdateResult();
|
UpdateResult rs = new UpdateResult();
|
||||||
QTableMetaData table = updateRequest.getTable();
|
QTableMetaData table = updateRequest.getTable();
|
||||||
|
|
||||||
List<QRecordWithStatus> recordsWithStatus = new ArrayList<>();
|
List<QRecord> outputRecords = new ArrayList<>();
|
||||||
rs.setRecords(recordsWithStatus);
|
rs.setRecords(outputRecords);
|
||||||
|
|
||||||
// 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?
|
||||||
@ -82,8 +81,8 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
|
|||||||
ConnectionManager connectionManager = new ConnectionManager();
|
ConnectionManager connectionManager = new ConnectionManager();
|
||||||
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) updateRequest.getBackend());
|
Connection connection = connectionManager.getConnection((RDBMSBackendMetaData) updateRequest.getBackend());
|
||||||
|
|
||||||
QRecordWithStatus recordWithStatus = new QRecordWithStatus(record);
|
QRecord outputRecord = new QRecord(record);
|
||||||
recordsWithStatus.add(recordWithStatus);
|
outputRecords.add(outputRecord);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -98,7 +97,8 @@ public class RDBMSUpdateAction extends AbstractRDBMSAction implements UpdateInte
|
|||||||
}
|
}
|
||||||
catch(Exception e)
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ package com.kingsrook.qqq.backend.module.rdbms.actions;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteRequest;
|
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.actions.delete.DeleteResult;
|
||||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@ -61,7 +60,7 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
|
|||||||
deleteRequest.setPrimaryKeys(List.of(1, 2, 3, 4, 5));
|
deleteRequest.setPrimaryKeys(List.of(1, 2, 3, 4, 5));
|
||||||
DeleteResult deleteResult = new RDBMSDeleteAction().execute(deleteRequest);
|
DeleteResult deleteResult = new RDBMSDeleteAction().execute(deleteRequest);
|
||||||
assertEquals(5, deleteResult.getRecords().size(), "Unfiltered delete should return all rows");
|
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())));
|
runTestSql("SELECT id FROM person", (rs -> assertFalse(rs.next())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +76,7 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
|
|||||||
deleteRequest.setPrimaryKeys(List.of(1));
|
deleteRequest.setPrimaryKeys(List.of(1));
|
||||||
DeleteResult deleteResult = new RDBMSDeleteAction().execute(deleteRequest);
|
DeleteResult deleteResult = new RDBMSDeleteAction().execute(deleteRequest);
|
||||||
assertEquals(1, deleteResult.getRecords().size(), "Should delete one row");
|
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())));
|
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));
|
deleteRequest.setPrimaryKeys(List.of(1, 3, 5));
|
||||||
DeleteResult deleteResult = new RDBMSDeleteAction().execute(deleteRequest);
|
DeleteResult deleteResult = new RDBMSDeleteAction().execute(deleteRequest);
|
||||||
assertEquals(3, deleteResult.getRecords().size(), "Should delete one row");
|
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 -> {
|
runTestSql("SELECT id FROM person", (rs -> {
|
||||||
int rowsFound = 0;
|
int rowsFound = 0;
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
|
@ -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.InsertRequest;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertResult;
|
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.QRecord;
|
||||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
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);
|
InsertResult insertResult = new RDBMSInsertAction().execute(insertRequest);
|
||||||
assertEquals(1, insertResult.getRecords().size(), "Should return 1 row");
|
assertEquals(1, insertResult.getRecords().size(), "Should return 1 row");
|
||||||
assertNotNull(insertResult.getRecords().get(0).getValue("id"), "Should have an id in the 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 -> {
|
runTestSql("SELECT * FROM person WHERE last_name = 'Kirk'", (rs -> {
|
||||||
int rowsFound = 0;
|
int rowsFound = 0;
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
@ -105,7 +103,7 @@ public class RDBMSInsertActionTest extends RDBMSActionTest
|
|||||||
assertEquals(2, insertResult.getRecords().size(), "Should return 1 row");
|
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(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");
|
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 -> {
|
runTestSql("SELECT * FROM person WHERE last_name = 'Picard'", (rs -> {
|
||||||
int rowsFound = 0;
|
int rowsFound = 0;
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
|
@ -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.UpdateRequest;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateResult;
|
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.QRecord;
|
||||||
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
|
|
||||||
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
import static org.junit.jupiter.api.Assertions.fail;
|
import static org.junit.jupiter.api.Assertions.fail;
|
||||||
|
|
||||||
|
|
||||||
@ -70,7 +68,7 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
|
|||||||
UpdateResult updateResult = new RDBMSUpdateAction().execute(updateRequest);
|
UpdateResult updateResult = new RDBMSUpdateAction().execute(updateRequest);
|
||||||
assertEquals(1, updateResult.getRecords().size(), "Should return 1 row");
|
assertEquals(1, updateResult.getRecords().size(), "Should return 1 row");
|
||||||
assertEquals(2, updateResult.getRecords().get(0).getValue("id"), "Should have id=2 in the 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 -> {
|
runTestSql("SELECT * FROM person WHERE last_name = 'Kirk'", (rs -> {
|
||||||
int rowsFound = 0;
|
int rowsFound = 0;
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
@ -115,7 +113,7 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
|
|||||||
assertEquals(2, updateResult.getRecords().size(), "Should return 2 rows");
|
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(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");
|
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 -> {
|
runTestSql("SELECT * FROM person WHERE last_name = 'From Bewitched'", (rs -> {
|
||||||
int rowsFound = 0;
|
int rowsFound = 0;
|
||||||
while(rs.next())
|
while(rs.next())
|
||||||
|
Reference in New Issue
Block a user