From 7160b87048f26e199bfc83c58f020ef29cb7b526 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 27 Sep 2023 19:50:30 -0500 Subject: [PATCH] Add method willTheBasePullQueryBeUsed --- .../basepull/ExtractViaBasepullQueryStep.java | 28 +++++++++++++++++++ .../ExtractViaBasepullQueryStepTest.java | 26 +++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/basepull/ExtractViaBasepullQueryStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/basepull/ExtractViaBasepullQueryStep.java index 722885ec..266df3fe 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/basepull/ExtractViaBasepullQueryStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/basepull/ExtractViaBasepullQueryStep.java @@ -89,6 +89,34 @@ public class ExtractViaBasepullQueryStep extends ExtractViaQueryStep + /******************************************************************************* + ** Let a subclass know if getQueryFilter will use the "default filter" (e.g., from + ** our base class, which would come from values passed in to the process), or if + ** the BasePull Query would be used (e.g., for a scheduled job). + *******************************************************************************/ + protected boolean willTheBasePullQueryBeUsed(RunBackendStepInput runBackendStepInput) + { + try + { + super.getQueryFilter(runBackendStepInput); + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // if super.getQueryFilter returned - then - there's a default query to use (e.g., a user selecting rows on a screen). // + // this means we won't use the BasePull query, so return a false here. // + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + return (false); + } + catch(QException qe) + { + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // if we catch here, assume that is because there was no default filter - in which case - we'll use the BasePull Query // + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + return (true); + } + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/basepull/ExtractViaBasepullQueryStepTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/basepull/ExtractViaBasepullQueryStepTest.java index fe2bca51..690b290e 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/basepull/ExtractViaBasepullQueryStepTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/basepull/ExtractViaBasepullQueryStepTest.java @@ -23,14 +23,17 @@ package com.kingsrook.qqq.backend.core.processes.implementations.basepull; import java.time.Instant; +import java.util.Map; import com.kingsrook.qqq.backend.core.BaseTest; import com.kingsrook.qqq.backend.core.actions.processes.RunProcessAction; 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.tables.query.QCriteriaOperator; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; +import com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwithfrontend.StreamedETLWithFrontendProcess; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -71,4 +74,27 @@ class ExtractViaBasepullQueryStepTest extends BaseTest assertTrue(queryFilter.getOrderBys().get(0).getIsAscending()); } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testWillTheBasePullQueryBeUsed() + { + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + // only time the base-pull query will be used is if there isn't a filter or records in the process input. // + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + assertTrue(new ExtractViaBasepullQueryStep().willTheBasePullQueryBeUsed(new RunBackendStepInput())); + + assertFalse(new ExtractViaBasepullQueryStep().willTheBasePullQueryBeUsed(new RunBackendStepInput() + .withValues(Map.of("recordIds", "1,2,3", StreamedETLWithFrontendProcess.FIELD_SOURCE_TABLE, "person")))); + + assertFalse(new ExtractViaBasepullQueryStep().willTheBasePullQueryBeUsed(new RunBackendStepInput() + .withValues(Map.of(StreamedETLWithFrontendProcess.FIELD_DEFAULT_QUERY_FILTER, new QQueryFilter())))); + + assertFalse(new ExtractViaBasepullQueryStep().willTheBasePullQueryBeUsed(new RunBackendStepInput() + .withValues(Map.of("queryFilterJson", "{}")))); + } + }