From ada10f144534067de2ea196513088d38ba947456 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Tue, 30 Nov 2021 18:08:41 -0600 Subject: [PATCH] Add BETWEEN, NOT_BETWEEN --- .../rdbms/actions/RDBMSQueryAction.java | 12 ++++++ .../rdbms/actions/RDBMSQueryActionTest.java | 40 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryAction.java b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryAction.java index 6b5baa83..d48b731f 100644 --- a/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryAction.java +++ b/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryAction.java @@ -283,6 +283,18 @@ public class RDBMSQueryAction extends AbstractRDBMSAction implements QueryInterf expectedNoOfParams = 0; break; } + case BETWEEN: + { + clause += " BETWEEN ? AND ? "; + expectedNoOfParams = 2; + break; + } + case NOT_BETWEEN: + { + clause += " NOT BETWEEN ? AND ? "; + expectedNoOfParams = 2; + break; + } default: { throw new IllegalArgumentException("Unexpected operator: " + criterion.getOperator()); diff --git a/src/test/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryActionTest.java b/src/test/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryActionTest.java index 9c28b934..9d1d3786 100644 --- a/src/test/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryActionTest.java +++ b/src/test/java/com/kingsrook/qqq/backend/module/rdbms/actions/RDBMSQueryActionTest.java @@ -346,6 +346,46 @@ public class RDBMSQueryActionTest extends RDBMSActionTest + /******************************************************************************* + ** + *******************************************************************************/ + @Test + public void testBetweenQuery() throws QException + { + QueryRequest queryRequest = initQueryRequest(); + queryRequest.setFilter(new QQueryFilter() + .withCriteria(new QFilterCriteria() + .withFieldName("id") + .withOperator(QCriteriaOperator.BETWEEN) + .withValues(List.of(2, 4)) + )); + QueryResult queryResult = new RDBMSQueryAction().execute(queryRequest); + Assertions.assertEquals(3, queryResult.getRecords().size(), "Expected # of rows"); + Assertions.assertTrue(queryResult.getRecords().stream().allMatch(r -> r.getValueInteger("id").equals(2) || r.getValueInteger("id").equals(3) || r.getValueInteger("id").equals(4)), "Should find expected ids"); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + public void testNotBetweenQuery() throws QException + { + QueryRequest queryRequest = initQueryRequest(); + queryRequest.setFilter(new QQueryFilter() + .withCriteria(new QFilterCriteria() + .withFieldName("id") + .withOperator(QCriteriaOperator.NOT_BETWEEN) + .withValues(List.of(2, 4)) + )); + QueryResult queryResult = new RDBMSQueryAction().execute(queryRequest); + Assertions.assertEquals(2, queryResult.getRecords().size(), "Expected # of rows"); + Assertions.assertTrue(queryResult.getRecords().stream().allMatch(r -> r.getValueInteger("id").equals(1) || r.getValueInteger("id").equals(5)), "Should find expected ids"); + } + + + /******************************************************************************* ** *******************************************************************************/