Add cases for merging an IN and IS_NOT_BLANK

This commit is contained in:
2024-05-17 15:59:38 -05:00
parent 759972b70c
commit 8816bc89c3
2 changed files with 43 additions and 0 deletions

View File

@ -34,6 +34,7 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter;
import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair; import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.EQUALS; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.EQUALS;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.IN; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.IN;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.IS_NOT_BLANK;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.NOT_EQUALS; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.NOT_EQUALS;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.NOT_IN; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.NOT_IN;
@ -311,6 +312,28 @@ public class QQueryFilterDeduper
log.add("Merge two not-equals as not-in"); log.add("Merge two not-equals as not-in");
continue; continue;
} }
else if(IN.equals(other.getOperator()) && IS_NOT_BLANK.equals(criteria.getOperator()))
{
//////////////////////////////////////////////////////////////////////////
// for an IN and IS_NOT_BLANK, remove the IS_NOT_BLANK - it's redundant //
//////////////////////////////////////////////////////////////////////////
iterator.remove();
didAnyGood = true;
log.add("Removing redundant is-not-blank");
continue;
}
else if(IS_NOT_BLANK.equals(other.getOperator()) && IN.equals(criteria.getOperator()))
{
//////////////////////////////////////////////////////////////////////////
// for an IN and IS_NOT_BLANK, remove the IS_NOT_BLANK - it's redundant //
//////////////////////////////////////////////////////////////////////////
other.setOperator(IN);
other.setValues(new ArrayList<>(criteria.getValues()));
iterator.remove();
didAnyGood = true;
log.add("Removing redundant is-not-blank");
continue;
}
else else
{ {
log.add("Fail because unhandled operator pair"); log.add("Fail because unhandled operator pair");

View File

@ -29,6 +29,7 @@ import org.junit.jupiter.api.Test;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.EQUALS; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.EQUALS;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.GREATER_THAN; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.GREATER_THAN;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.IN; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.IN;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.IS_NOT_BLANK;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.NOT_EQUALS; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.NOT_EQUALS;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.NOT_IN; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator.NOT_IN;
import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter.BooleanOperator.OR; import static com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter.BooleanOperator.OR;
@ -352,4 +353,23 @@ class QQueryFilterDeduperTest extends BaseTest
assertEquals(contradiction, dedupeFilter(contradiction)); assertEquals(contradiction, dedupeFilter(contradiction));
} }
/*******************************************************************************
**
*******************************************************************************/
@Test
void testInAndIsNotBlank()
{
assertEquals(new QQueryFilter().withCriteria(new QFilterCriteria("f", IN, 1, 2)), dedupeFilter(new QQueryFilter()
.withCriteria(new QFilterCriteria("f", IN, 1, 2))
.withCriteria(new QFilterCriteria("f", IS_NOT_BLANK))
));
assertEquals(new QQueryFilter().withCriteria(new QFilterCriteria("f", IN, 1, 2)), dedupeFilter(new QQueryFilter()
.withCriteria(new QFilterCriteria("f", IS_NOT_BLANK))
.withCriteria(new QFilterCriteria("f", IN, 1, 2))
));
}
} }