From 34a1cd80f4ca1aef589e171fb613efcfca59d93c Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 27 Sep 2023 13:54:05 -0500 Subject: [PATCH] in getSqlWhereStringAndPopulateParamsList... - skip a criteria with null fieldName or operator - and then if there were no valid criteria, return 1=1 --- .../rdbms/actions/AbstractRDBMSAction.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/qqq-backend-module-rdbms/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/AbstractRDBMSAction.java b/qqq-backend-module-rdbms/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/AbstractRDBMSAction.java index 7394cbfd..1bf0b4fd 100644 --- a/qqq-backend-module-rdbms/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/AbstractRDBMSAction.java +++ b/qqq-backend-module-rdbms/src/main/java/com/kingsrook/qqq/backend/module/rdbms/actions/AbstractRDBMSAction.java @@ -399,6 +399,18 @@ public abstract class AbstractRDBMSAction implements QActionInterface List clauses = new ArrayList<>(); for(QFilterCriteria criterion : criteria) { + if(criterion.getFieldName() == null) + { + LOG.info("QFilter criteria is missing a fieldName - will not be included in query."); + continue; + } + + if(criterion.getOperator() == null) + { + LOG.info("QFilter criteria is missing a operator - will not be included in query.", logPair("fieldName", criterion.getFieldName())); + continue; + } + JoinsContext.FieldAndTableNameOrAlias fieldAndTableNameOrAlias = joinsContext.getFieldAndTableNameOrAlias(criterion.getFieldName()); List values = criterion.getValues() == null ? new ArrayList<>() : new ArrayList<>(criterion.getValues()); @@ -628,6 +640,16 @@ public abstract class AbstractRDBMSAction implements QActionInterface params.addAll(values); } + ////////////////////////////////////////////////////////////////////////////// + // since we're skipping criteria w/o a field or operator in the loop - // + // we can get to the end here without any clauses... so, return a 1=1 then, // + // as whoever called this is probably already written a WHERE or AND // + ////////////////////////////////////////////////////////////////////////////// + if(clauses.isEmpty()) + { + return ("1 = 1"); + } + return (String.join(" " + booleanOperator.toString() + " ", clauses)); }