diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/QBackendTransaction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/QBackendTransaction.java index 64a0c57e..465dae45 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/QBackendTransaction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/QBackendTransaction.java @@ -23,6 +23,9 @@ package com.kingsrook.qqq.backend.core.actions; import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.actions.AbstractTableActionInput; +import com.kingsrook.qqq.backend.core.modules.backend.QBackendModuleDispatcher; +import com.kingsrook.qqq.backend.core.modules.backend.QBackendModuleInterface; /******************************************************************************* @@ -30,12 +33,26 @@ import com.kingsrook.qqq.backend.core.exceptions.QException; ** part of a transaction. ** ** Most obvious use-case would be a JDBC Connection. See subclass in rdbms module. + ** Ditto MongoDB. ** ** Note: One would imagine that this class shouldn't ever implement Serializable... *******************************************************************************/ public class QBackendTransaction { + /******************************************************************************* + ** + *******************************************************************************/ + public static QBackendTransaction openFor(AbstractTableActionInput input) throws QException + { + QBackendModuleDispatcher qBackendModuleDispatcher = new QBackendModuleDispatcher(); + QBackendModuleInterface qModule = qBackendModuleDispatcher.getQBackendModule(input.getBackend()); + QBackendTransaction transaction = qModule.openTransaction(input); + return (transaction); + } + + + /******************************************************************************* ** Commit the transaction. *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/interfaces/InsertInterface.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/interfaces/InsertInterface.java index 3eb2738d..a1316cdf 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/interfaces/InsertInterface.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/interfaces/InsertInterface.java @@ -31,7 +31,7 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertOutput; ** Interface for the Insert action. ** *******************************************************************************/ -public interface InsertInterface extends QActionInterface +public interface InsertInterface { /******************************************************************************* ** diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java index 9d60d611..794c9f57 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/tables/InsertAction.java @@ -23,6 +23,7 @@ package com.kingsrook.qqq.backend.core.actions.tables; import java.io.Serializable; +import java.time.Instant; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -52,6 +53,7 @@ import com.kingsrook.qqq.backend.core.model.actions.audits.DMLAuditInput; 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.core.model.metadata.QBackendMetaData; 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.joins.JoinOn; @@ -116,21 +118,15 @@ public class InsertAction extends AbstractQActionFunction()); + return (rs); + } + + ///////////////////////////////////////////// + // set values in create date & modify date // + // todo .. better (not hard-coded names) // + ///////////////////////////////////////////// + Instant now = Instant.now(); + for(QRecord record : insertInput.getRecords()) + { + setValueIfTableHasField(record, insertInput.getTable(), "createDate", now); + setValueIfTableHasField(record, insertInput.getTable(), "modifyDate", now); + } + + ////////////////////////////////////////////////////// + // load the backend module and its insert interface // + ////////////////////////////////////////////////////// + QBackendModuleInterface qModule = getBackendModuleInterface(insertInput.getBackend()); + InsertInterface insertInterface = qModule.getInsertInterface(); + + //////////////////////////////////// + // have the backend do the insert // + //////////////////////////////////// + InsertOutput insertOutput = insertInterface.execute(insertInput); + return insertOutput; + } + + + + /******************************************************************************* + ** If the table has a field with the given name, then set the given value in the + ** given record. + *******************************************************************************/ + private static void setValueIfTableHasField(QRecord record, QTableMetaData table, String fieldName, Serializable value) + { + try + { + if(table.getFields().containsKey(fieldName)) + { + record.setValue(fieldName, value); + } + } + catch(Exception e) + { + ///////////////////////////////////////////////// + // this means field doesn't exist, so, ignore. // + ///////////////////////////////////////////////// + } + } + + + /******************************************************************************* ** *******************************************************************************/ @@ -426,23 +487,11 @@ public class InsertAction extends AbstractQActionFunction()); + return (rs); + } + + UpdateOutput updateOutput = updateInterface.execute(updateInput); + return updateOutput; + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/values/QPossibleValueTranslator.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/values/QPossibleValueTranslator.java index 7905e706..12a3f2f9 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/values/QPossibleValueTranslator.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/values/QPossibleValueTranslator.java @@ -34,7 +34,6 @@ import java.util.Objects; import java.util.Set; import com.kingsrook.qqq.backend.core.actions.QBackendTransaction; import com.kingsrook.qqq.backend.core.actions.customizers.QCodeLoader; -import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.exceptions.QValueException; @@ -104,7 +103,7 @@ public class QPossibleValueTranslator { if(!transactionsPerTable.containsKey(tableName)) { - transactionsPerTable.put(tableName, new InsertAction().openTransaction(new InsertInput(tableName))); + transactionsPerTable.put(tableName, QBackendTransaction.openFor(new InsertInput(tableName))); } return (transactionsPerTable.get(tableName)); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/QBackendModuleInterface.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/QBackendModuleInterface.java index 6e3f5811..64ce0c3c 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/QBackendModuleInterface.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/QBackendModuleInterface.java @@ -22,6 +22,7 @@ package com.kingsrook.qqq.backend.core.modules.backend; +import com.kingsrook.qqq.backend.core.actions.QBackendTransaction; import com.kingsrook.qqq.backend.core.actions.interfaces.AggregateInterface; import com.kingsrook.qqq.backend.core.actions.interfaces.CountInterface; import com.kingsrook.qqq.backend.core.actions.interfaces.DeleteInterface; @@ -29,6 +30,8 @@ import com.kingsrook.qqq.backend.core.actions.interfaces.GetInterface; import com.kingsrook.qqq.backend.core.actions.interfaces.InsertInterface; import com.kingsrook.qqq.backend.core.actions.interfaces.QueryInterface; import com.kingsrook.qqq.backend.core.actions.interfaces.UpdateInterface; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.actions.AbstractTableActionInput; import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableBackendDetails; @@ -126,6 +129,14 @@ public interface QBackendModuleInterface return null; } + /******************************************************************************* + ** + *******************************************************************************/ + default QBackendTransaction openTransaction(AbstractTableActionInput input) throws QException + { + return (new QBackendTransaction()); + } + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/implementations/memory/AbstractMemoryAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/implementations/memory/AbstractMemoryAction.java index b492c76e..cead33b2 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/implementations/memory/AbstractMemoryAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/implementations/memory/AbstractMemoryAction.java @@ -23,7 +23,6 @@ package com.kingsrook.qqq.backend.core.modules.backend.implementations.memory; import java.io.Serializable; -import com.kingsrook.qqq.backend.core.actions.interfaces.QActionInterface; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.utils.StringUtils; @@ -32,7 +31,7 @@ import com.kingsrook.qqq.backend.core.utils.StringUtils; /******************************************************************************* ** Base class for all core actions in the Memory backend module. *******************************************************************************/ -public abstract class AbstractMemoryAction implements QActionInterface +public abstract class AbstractMemoryAction { /******************************************************************************* diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/implementations/memory/MemoryInsertAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/implementations/memory/MemoryInsertAction.java index 401c4ab8..a6e6dcd4 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/implementations/memory/MemoryInsertAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/modules/backend/implementations/memory/MemoryInsertAction.java @@ -22,13 +22,10 @@ package com.kingsrook.qqq.backend.core.modules.backend.implementations.memory; -import java.time.Instant; import com.kingsrook.qqq.backend.core.actions.interfaces.InsertInterface; import com.kingsrook.qqq.backend.core.exceptions.QException; 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.core.model.metadata.tables.QTableMetaData; /******************************************************************************* @@ -45,18 +42,6 @@ public class MemoryInsertAction extends AbstractMemoryAction implements InsertIn { try { - QTableMetaData table = insertInput.getTable(); - Instant now = Instant.now(); - - for(QRecord record : insertInput.getRecords()) - { - /////////////////////////////////////////// - // todo .. better (not hard-coded names) // - /////////////////////////////////////////// - setValueIfTableHasField(record, table, "createDate", now, false); - setValueIfTableHasField(record, table, "modifyDate", now, false); - } - InsertOutput insertOutput = new InsertOutput(); insertOutput.setRecords(MemoryRecordStore.getInstance().insert(insertInput, true)); return (insertOutput); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamed/StreamedETLBackendStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamed/StreamedETLBackendStep.java index 2bc93358..a8e05ebd 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamed/StreamedETLBackendStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamed/StreamedETLBackendStep.java @@ -27,7 +27,6 @@ import com.kingsrook.qqq.backend.core.actions.QBackendTransaction; import com.kingsrook.qqq.backend.core.actions.async.AsyncRecordPipeLoop; import com.kingsrook.qqq.backend.core.actions.processes.BackendStep; import com.kingsrook.qqq.backend.core.actions.reporting.RecordPipe; -import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.logging.QLogger; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; @@ -116,7 +115,7 @@ public class StreamedETLBackendStep implements BackendStep insertInput.setTableName(runBackendStepInput.getValueString(BasicETLProcess.FIELD_DESTINATION_TABLE)); - return new InsertAction().openTransaction(insertInput); + return QBackendTransaction.openFor(insertInput); } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java index 66589432..0cee40ac 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaDeleteStep.java @@ -26,7 +26,6 @@ import java.util.Optional; import java.util.stream.Collectors; import com.kingsrook.qqq.backend.core.actions.QBackendTransaction; import com.kingsrook.qqq.backend.core.actions.tables.DeleteAction; -import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; @@ -34,7 +33,6 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput; import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteOutput; -import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; @@ -87,9 +85,8 @@ public class LoadViaDeleteStep extends AbstractLoadStep @Override public Optional openTransaction(RunBackendStepInput runBackendStepInput) throws QException { - InsertInput insertInput = new InsertInput(); - insertInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE)); - - return (Optional.of(new InsertAction().openTransaction(insertInput))); + DeleteInput deleteInput = new DeleteInput(); + deleteInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE)); + return (Optional.of(QBackendTransaction.openFor(deleteInput))); } } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java index 0263fe5a..f9f87750 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertOrUpdateStep.java @@ -129,8 +129,7 @@ public class LoadViaInsertOrUpdateStep extends AbstractLoadStep { InsertInput insertInput = new InsertInput(); insertInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE)); - - return (Optional.of(new InsertAction().openTransaction(insertInput))); + return (Optional.of(QBackendTransaction.openFor(insertInput))); } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java index a5f9718b..b2fad610 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaInsertStep.java @@ -88,7 +88,6 @@ public class LoadViaInsertStep extends AbstractLoadStep { InsertInput insertInput = new InsertInput(); insertInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE)); - - return (Optional.of(new InsertAction().openTransaction(insertInput))); + return (Optional.of(QBackendTransaction.openFor(insertInput))); } } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java index 2f1755ec..b9472c38 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/etl/streamedwithfrontend/LoadViaUpdateStep.java @@ -24,14 +24,12 @@ package com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwit import java.util.Optional; import com.kingsrook.qqq.backend.core.actions.QBackendTransaction; -import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; import com.kingsrook.qqq.backend.core.model.actions.tables.InputSource; import com.kingsrook.qqq.backend.core.model.actions.tables.QInputSource; -import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput; import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateOutput; @@ -81,9 +79,8 @@ public class LoadViaUpdateStep extends AbstractLoadStep @Override public Optional openTransaction(RunBackendStepInput runBackendStepInput) throws QException { - InsertInput insertInput = new InsertInput(); - insertInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE)); - - return (Optional.of(new InsertAction().openTransaction(insertInput))); + UpdateInput updateInput = new UpdateInput(); + updateInput.setTableName(runBackendStepInput.getValueString(FIELD_DESTINATION_TABLE)); + return (Optional.of(QBackendTransaction.openFor(updateInput))); } } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/scripts/StoreScriptRevisionProcessStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/scripts/StoreScriptRevisionProcessStep.java index 4893920a..70129eec 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/scripts/StoreScriptRevisionProcessStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/scripts/StoreScriptRevisionProcessStep.java @@ -75,7 +75,7 @@ public class StoreScriptRevisionProcessStep implements BackendStep InsertAction insertAction = new InsertAction(); InsertInput insertInput = new InsertInput(); insertInput.setTableName(ScriptRevision.TABLE_NAME); - QBackendTransaction transaction = insertAction.openTransaction(insertInput); + QBackendTransaction transaction = QBackendTransaction.openFor(insertInput); insertInput.setTransaction(transaction); try diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/scripts/RunAssociatedScriptActionTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/scripts/RunAssociatedScriptActionTest.java index be04f40a..bb1275b7 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/scripts/RunAssociatedScriptActionTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/scripts/RunAssociatedScriptActionTest.java @@ -156,10 +156,10 @@ class RunAssociatedScriptActionTest extends BaseTest ///////////////////////////////////// assertEquals(N, TestUtils.queryTable(ScriptLog.TABLE_NAME).size()); - //////////////////////////////////////////////////////////////////////////////////////// - // and we should have just ran 2 inserts - for the log & logLines (even though empty) // - //////////////////////////////////////////////////////////////////////////////////////// - assertEquals(2, MemoryRecordStore.getStatistics().get(MemoryRecordStore.STAT_INSERTS_RAN)); + ///////////////////////////////////////////////////////////////////////////////////////////////////////////// + // and we should have just ran 1 inserts - for the log (no longer run one for empty insert of 0 log-lines) // + ///////////////////////////////////////////////////////////////////////////////////////////////////////////// + assertEquals(1, MemoryRecordStore.getStatistics().get(MemoryRecordStore.STAT_INSERTS_RAN)); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // and we shouldn't have run N queries (which we would have (at least), if we would have built a new Action object inside the loop) // diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/garbagecollector/GarbageCollectorTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/garbagecollector/GarbageCollectorTest.java index 1ad4dfb6..0b09865d 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/garbagecollector/GarbageCollectorTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/garbagecollector/GarbageCollectorTest.java @@ -74,7 +74,7 @@ class GarbageCollectorTest extends BaseTest @Test void testBasic() throws QException { - QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_PERSON_MEMORY, "createDate", NowWithOffset.minus(30, ChronoUnit.DAYS), null); + QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_PERSON_MEMORY, "timestamp", NowWithOffset.minus(30, ChronoUnit.DAYS), null); QContext.getQInstance().addProcess(process); new InsertAction().execute(new InsertInput(TestUtils.TABLE_NAME_PERSON_MEMORY).withRecords(getPersonRecords())); @@ -97,11 +97,11 @@ class GarbageCollectorTest extends BaseTest private static List getPersonRecords() { List records = List.of( - new QRecord().withValue("id", 1).withValue("createDate", Instant.now().minus(90, ChronoUnit.DAYS)), - new QRecord().withValue("id", 2).withValue("createDate", Instant.now().minus(31, ChronoUnit.DAYS)), - new QRecord().withValue("id", 3).withValue("createDate", Instant.now().minus(30, ChronoUnit.DAYS).minus(5, ChronoUnit.MINUTES)), - new QRecord().withValue("id", 4).withValue("createDate", Instant.now().minus(29, ChronoUnit.DAYS).minus(23, ChronoUnit.HOURS)), - new QRecord().withValue("id", 5).withValue("createDate", Instant.now().minus(5, ChronoUnit.DAYS))); + new QRecord().withValue("id", 1).withValue("timestamp", Instant.now().minus(90, ChronoUnit.DAYS)), + new QRecord().withValue("id", 2).withValue("timestamp", Instant.now().minus(31, ChronoUnit.DAYS)), + new QRecord().withValue("id", 3).withValue("timestamp", Instant.now().minus(30, ChronoUnit.DAYS).minus(5, ChronoUnit.MINUTES)), + new QRecord().withValue("id", 4).withValue("timestamp", Instant.now().minus(29, ChronoUnit.DAYS).minus(23, ChronoUnit.HOURS)), + new QRecord().withValue("id", 5).withValue("timestamp", Instant.now().minus(5, ChronoUnit.DAYS))); return records; } @@ -113,7 +113,7 @@ class GarbageCollectorTest extends BaseTest @Test void testOverrideDate() throws QException { - QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_PERSON_MEMORY, "createDate", NowWithOffset.minus(30, ChronoUnit.DAYS), null); + QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_PERSON_MEMORY, "timestamp", NowWithOffset.minus(30, ChronoUnit.DAYS), null); QContext.getQInstance().addProcess(process); new InsertAction().execute(new InsertInput(TestUtils.TABLE_NAME_PERSON_MEMORY).withRecords(getPersonRecords())); @@ -157,7 +157,7 @@ class GarbageCollectorTest extends BaseTest @Test void testWithDeleteAllJoins() throws QException { - QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_ORDER, "createDate", NowWithOffset.minus(30, ChronoUnit.DAYS), "*"); + QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_ORDER, "timestamp", NowWithOffset.minus(30, ChronoUnit.DAYS), "*"); QContext.getQInstance().addProcess(process); QContext.getQSession().withSecurityKeyValue(TestUtils.SECURITY_KEY_TYPE_STORE_ALL_ACCESS, true); @@ -192,7 +192,7 @@ class GarbageCollectorTest extends BaseTest @Test void testWithDeleteSomeJoins() throws QException { - QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_ORDER, "createDate", NowWithOffset.minus(30, ChronoUnit.DAYS), TestUtils.TABLE_NAME_LINE_ITEM); + QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_ORDER, "timestamp", NowWithOffset.minus(30, ChronoUnit.DAYS), TestUtils.TABLE_NAME_LINE_ITEM); QContext.getQInstance().addProcess(process); ////////////////////////////////////////////////////////////////////////// @@ -232,7 +232,7 @@ class GarbageCollectorTest extends BaseTest @Test void testWithDeleteNoJoins() throws QException { - QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_ORDER, "createDate", NowWithOffset.minus(30, ChronoUnit.DAYS), null); + QProcessMetaData process = GarbageCollectorProcessMetaDataProducer.createProcess(TestUtils.TABLE_NAME_ORDER, "timestamp", NowWithOffset.minus(30, ChronoUnit.DAYS), null); QContext.getQInstance().addProcess(process); //////////////////////////////////////////////////////////////////////////////// @@ -270,11 +270,11 @@ class GarbageCollectorTest extends BaseTest private static List getOrderRecords() { List records = List.of( - new QRecord().withValue("id", 1).withValue("createDate", Instant.now().minus(90, ChronoUnit.DAYS)), - new QRecord().withValue("id", 2).withValue("createDate", Instant.now().minus(31, ChronoUnit.DAYS)), - new QRecord().withValue("id", 3).withValue("createDate", Instant.now().minus(30, ChronoUnit.DAYS).minus(5, ChronoUnit.MINUTES)), - new QRecord().withValue("id", 4).withValue("createDate", Instant.now().minus(29, ChronoUnit.DAYS).minus(23, ChronoUnit.HOURS)), - new QRecord().withValue("id", 5).withValue("createDate", Instant.now().minus(5, ChronoUnit.DAYS))); + new QRecord().withValue("id", 1).withValue("timestamp", Instant.now().minus(90, ChronoUnit.DAYS)), + new QRecord().withValue("id", 2).withValue("timestamp", Instant.now().minus(31, ChronoUnit.DAYS)), + new QRecord().withValue("id", 3).withValue("timestamp", Instant.now().minus(30, ChronoUnit.DAYS).minus(5, ChronoUnit.MINUTES)), + new QRecord().withValue("id", 4).withValue("timestamp", Instant.now().minus(29, ChronoUnit.DAYS).minus(23, ChronoUnit.HOURS)), + new QRecord().withValue("id", 5).withValue("timestamp", Instant.now().minus(5, ChronoUnit.DAYS))); return records; } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/TestUtils.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/TestUtils.java index bf1d0825..a34e5a4f 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/TestUtils.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/TestUtils.java @@ -549,7 +549,9 @@ public class TestUtils .withField(new QFieldMetaData("cost", QFieldType.DECIMAL).withDisplayFormat(DisplayFormat.CURRENCY)) .withField(new QFieldMetaData("price", QFieldType.DECIMAL).withDisplayFormat(DisplayFormat.CURRENCY)) .withField(new QFieldMetaData("ssn", QFieldType.STRING).withType(QFieldType.PASSWORD)) - .withField(new QFieldMetaData("superSecret", QFieldType.STRING).withType(QFieldType.PASSWORD).withIsHidden(true)); + .withField(new QFieldMetaData("superSecret", QFieldType.STRING).withType(QFieldType.PASSWORD).withIsHidden(true)) + .withField(new QFieldMetaData("timestamp", QFieldType.DATE_TIME)) // adding this for GC tests, so we can set a date-time (since CD & MD are owned by system) + ; } @@ -602,6 +604,7 @@ public class TestUtils .withField(new QFieldMetaData("id", QFieldType.INTEGER).withIsEditable(false)) .withField(new QFieldMetaData("createDate", QFieldType.DATE_TIME).withIsEditable(false)) .withField(new QFieldMetaData("modifyDate", QFieldType.DATE_TIME).withIsEditable(false)) + .withField(new QFieldMetaData("timestamp", QFieldType.DATE_TIME)) // adding this for GC tests, so we can set a date-time (since CD & MD are owned by system) .withField(new QFieldMetaData("orderId", QFieldType.INTEGER)) .withField(new QFieldMetaData("lineNumber", QFieldType.STRING)) .withField(new QFieldMetaData("sku", QFieldType.STRING).withLabel("SKU"))