mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-19 21:50:45 +00:00
Refactor to use RDBMSActionStrategy
This commit is contained in:
@ -34,8 +34,8 @@ import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDetails;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.strategy.BaseRDBMSActionStrategy;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
@ -128,6 +128,11 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
|
||||
deleteInput.setPrimaryKeys(List.of(1, -1));
|
||||
DeleteOutput deleteResult = new RDBMSDeleteAction().execute(deleteInput);
|
||||
assertEquals(1, deleteResult.getDeletedRecordCount(), "Should delete one row");
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// note - that if we went to the top-level DeleteAction, then it would have pre- //
|
||||
// checked that the ids existed, and it WOULD give us an error for the -1 row here //
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
assertEquals(0, deleteResult.getRecordsWithErrors().size(), "should have no errors (the one not found is just noop)");
|
||||
}
|
||||
|
||||
@ -162,17 +167,15 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
deleteInput.setPrimaryKeys(List.of(1, 2, 3, 4, 5));
|
||||
|
||||
QueryManager.setCollectStatistics(true);
|
||||
QueryManager.resetStatistics();
|
||||
|
||||
BaseRDBMSActionStrategy actionStrategy = getBaseRDBMSActionStrategyAndActivateCollectingStatistics();
|
||||
DeleteOutput deleteResult = new RDBMSDeleteAction().execute(deleteInput);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// assert that 6 queries ran - the initial delete (which failed), then 5 more deletes //
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
QueryManager.setCollectStatistics(false);
|
||||
Map<String, Integer> queryStats = QueryManager.getStatistics();
|
||||
assertEquals(6, queryStats.get(QueryManager.STAT_QUERIES_RAN), "Number of queries ran");
|
||||
actionStrategy.setCollectStatistics(false);
|
||||
Map<String, Integer> queryStats = actionStrategy.getStatistics();
|
||||
assertEquals(6, queryStats.get(BaseRDBMSActionStrategy.STAT_QUERIES_RAN), "Number of queries ran");
|
||||
|
||||
assertEquals(2, deleteResult.getRecordsWithErrors().size(), "Should get back the 2 records with errors");
|
||||
assertTrue(deleteResult.getRecordsWithErrors().stream().noneMatch(r -> r.getErrors().isEmpty()), "All we got back should have errors");
|
||||
@ -212,17 +215,15 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
deleteInput.setQueryFilter(new QQueryFilter(new QFilterCriteria("id", QCriteriaOperator.IN, List.of(2, 4, 5))));
|
||||
|
||||
QueryManager.setCollectStatistics(true);
|
||||
QueryManager.resetStatistics();
|
||||
|
||||
BaseRDBMSActionStrategy actionStrategy = getBaseRDBMSActionStrategyAndActivateCollectingStatistics();
|
||||
DeleteOutput deleteResult = new RDBMSDeleteAction().execute(deleteInput);
|
||||
|
||||
//////////////////////////////////
|
||||
// assert that just 1 query ran //
|
||||
//////////////////////////////////
|
||||
QueryManager.setCollectStatistics(false);
|
||||
Map<String, Integer> queryStats = QueryManager.getStatistics();
|
||||
assertEquals(1, queryStats.get(QueryManager.STAT_QUERIES_RAN), "Number of queries ran");
|
||||
actionStrategy.setCollectStatistics(false);
|
||||
Map<String, Integer> queryStats = actionStrategy.getStatistics();
|
||||
assertEquals(1, queryStats.get(BaseRDBMSActionStrategy.STAT_QUERIES_RAN), "Number of queries ran");
|
||||
assertEquals(3, deleteResult.getDeletedRecordCount(), "Should get back that 3 were deleted");
|
||||
|
||||
runTestSql("SELECT id FROM child_table", (rs ->
|
||||
@ -259,9 +260,7 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
deleteInput.setQueryFilter(new QQueryFilter(new QFilterCriteria("id", QCriteriaOperator.IN, List.of(1, 2, 3, 4, 5))));
|
||||
|
||||
QueryManager.setCollectStatistics(true);
|
||||
QueryManager.resetStatistics();
|
||||
|
||||
BaseRDBMSActionStrategy actionStrategy = getBaseRDBMSActionStrategyAndActivateCollectingStatistics();
|
||||
DeleteOutput deleteResult = new RDBMSDeleteAction().execute(deleteInput);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -270,9 +269,9 @@ public class RDBMSDeleteActionTest extends RDBMSActionTest
|
||||
// todo - maybe we shouldn't do that 2nd "try to delete 'em all by id"... why would it ever work, //
|
||||
// but the original filter query didn't (other than malformed SQL)? //
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
QueryManager.setCollectStatistics(false);
|
||||
Map<String, Integer> queryStats = QueryManager.getStatistics();
|
||||
assertEquals(8, queryStats.get(QueryManager.STAT_QUERIES_RAN), "Number of queries ran");
|
||||
actionStrategy.setCollectStatistics(false);
|
||||
Map<String, Integer> queryStats = actionStrategy.getStatistics();
|
||||
assertEquals(8, queryStats.get(BaseRDBMSActionStrategy.STAT_QUERIES_RAN), "Number of queries ran");
|
||||
|
||||
assertEquals(2, deleteResult.getRecordsWithErrors().size(), "Should get back the 2 records with errors");
|
||||
assertTrue(deleteResult.getRecordsWithErrors().stream().noneMatch(r -> r.getErrors().isEmpty()), "All we got back should have errors");
|
||||
|
@ -24,6 +24,7 @@ package com.kingsrook.qqq.backend.module.rdbms.actions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
|
||||
import com.kingsrook.qqq.backend.core.context.QContext;
|
||||
@ -32,7 +33,7 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
|
||||
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertOutput;
|
||||
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.strategy.BaseRDBMSActionStrategy;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
@ -53,6 +54,8 @@ public class RDBMSInsertActionTest extends RDBMSActionTest
|
||||
public void beforeEach() throws Exception
|
||||
{
|
||||
super.primeTestDatabase();
|
||||
|
||||
getBaseRDBMSActionStrategyAndActivateCollectingStatistics();
|
||||
}
|
||||
|
||||
|
||||
@ -113,7 +116,7 @@ public class RDBMSInsertActionTest extends RDBMSActionTest
|
||||
@Test
|
||||
public void testInsertMany() throws Exception
|
||||
{
|
||||
QueryManager.setPageSize(2);
|
||||
getBaseRDBMSActionStrategy().setPageSize(2);
|
||||
|
||||
InsertInput insertInput = initInsertRequest();
|
||||
QRecord record1 = new QRecord().withTableName("person")
|
||||
@ -137,6 +140,10 @@ public class RDBMSInsertActionTest extends RDBMSActionTest
|
||||
assertEquals(6, insertOutput.getRecords().get(0).getValue("id"), "Should have next id in the row");
|
||||
assertEquals(7, insertOutput.getRecords().get(1).getValue("id"), "Should have next id in the row");
|
||||
assertEquals(8, insertOutput.getRecords().get(2).getValue("id"), "Should have next id in the row");
|
||||
|
||||
Map<String, Integer> statistics = getBaseRDBMSActionStrategy().getStatistics();
|
||||
assertEquals(2, statistics.get(BaseRDBMSActionStrategy.STAT_QUERIES_RAN));
|
||||
|
||||
assertAnInsertedPersonRecord("Jean-Luc", "Picard", 6);
|
||||
assertAnInsertedPersonRecord("William", "Riker", 7);
|
||||
assertAnInsertedPersonRecord("Beverly", "Crusher", 8);
|
||||
|
@ -36,7 +36,7 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateOutput;
|
||||
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
||||
import com.kingsrook.qqq.backend.core.utils.StringUtils;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
|
||||
import com.kingsrook.qqq.backend.module.rdbms.strategy.BaseRDBMSActionStrategy;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
@ -61,8 +61,7 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
|
||||
{
|
||||
super.primeTestDatabase();
|
||||
|
||||
QueryManager.setCollectStatistics(true);
|
||||
QueryManager.resetStatistics();
|
||||
getBaseRDBMSActionStrategyAndActivateCollectingStatistics();
|
||||
}
|
||||
|
||||
|
||||
@ -112,8 +111,8 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
|
||||
updateInput.setRecords(List.of(record));
|
||||
|
||||
UpdateOutput updateResult = new UpdateAction().execute(updateInput);
|
||||
Map<String, Integer> statistics = QueryManager.getStatistics();
|
||||
assertEquals(2, statistics.get(QueryManager.STAT_QUERIES_RAN));
|
||||
Map<String, Integer> statistics = getBaseRDBMSActionStrategy().getStatistics();
|
||||
assertEquals(2, statistics.get(BaseRDBMSActionStrategy.STAT_QUERIES_RAN));
|
||||
|
||||
assertEquals(1, updateResult.getRecords().size(), "Should return 1 row");
|
||||
assertEquals(2, updateResult.getRecords().get(0).getValue("id"), "Should have id=2 in the row");
|
||||
@ -169,9 +168,9 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
|
||||
UpdateOutput updateResult = new UpdateAction().execute(updateInput);
|
||||
|
||||
// this test runs one batch and one regular query
|
||||
Map<String, Integer> statistics = QueryManager.getStatistics();
|
||||
assertEquals(1, statistics.get(QueryManager.STAT_BATCHES_RAN));
|
||||
assertEquals(2, statistics.get(QueryManager.STAT_QUERIES_RAN));
|
||||
Map<String, Integer> statistics = getBaseRDBMSActionStrategy().getStatistics();
|
||||
assertEquals(1, statistics.get(BaseRDBMSActionStrategy.STAT_BATCHES_RAN));
|
||||
assertEquals(2, statistics.get(BaseRDBMSActionStrategy.STAT_QUERIES_RAN));
|
||||
|
||||
assertEquals(3, updateResult.getRecords().size(), "Should return 3 rows");
|
||||
assertEquals(1, updateResult.getRecords().get(0).getValue("id"), "Should have expected ids in the row");
|
||||
@ -241,8 +240,8 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
|
||||
updateInput.setRecords(List.of(record1, record2));
|
||||
|
||||
UpdateOutput updateResult = new UpdateAction().execute(updateInput);
|
||||
Map<String, Integer> statistics = QueryManager.getStatistics();
|
||||
assertEquals(1, statistics.get(QueryManager.STAT_BATCHES_RAN));
|
||||
Map<String, Integer> statistics = getBaseRDBMSActionStrategy().getStatistics();
|
||||
assertEquals(1, statistics.get(BaseRDBMSActionStrategy.STAT_BATCHES_RAN));
|
||||
|
||||
assertEquals(2, updateResult.getRecords().size(), "Should return 2 rows");
|
||||
assertEquals(1, updateResult.getRecords().get(0).getValue("id"), "Should have expected ids in the row");
|
||||
@ -296,8 +295,8 @@ public class RDBMSUpdateActionTest extends RDBMSActionTest
|
||||
updateInput.setRecords(records);
|
||||
|
||||
UpdateOutput updateResult = new UpdateAction().execute(updateInput);
|
||||
Map<String, Integer> statistics = QueryManager.getStatistics();
|
||||
assertEquals(2, statistics.get(QueryManager.STAT_QUERIES_RAN));
|
||||
Map<String, Integer> statistics = getBaseRDBMSActionStrategy().getStatistics();
|
||||
assertEquals(2, statistics.get(BaseRDBMSActionStrategy.STAT_QUERIES_RAN));
|
||||
|
||||
assertEquals(5, updateResult.getRecords().size(), "Should return 5 rows");
|
||||
// todo - add errors to QRecord? assertTrue(updateResult.getRecords().stream().noneMatch(qrs -> CollectionUtils.nullSafeHasContents(qrs.getErrors())), "There should be no errors");
|
||||
|
Reference in New Issue
Block a user