diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java index a52888382..38da84a52 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java @@ -29,7 +29,9 @@ public final class ExpressionUtils { public static Predicate allOf(Predicate... exprs){ Predicate rv = null; for (Predicate b : exprs){ - rv = rv == null ? b : ExpressionUtils.and(rv,b); + if (b != null) { + rv = rv == null ? b : ExpressionUtils.and(rv,b); + } } return rv; } @@ -55,7 +57,9 @@ public final class ExpressionUtils { public static Predicate anyOf(Predicate... exprs){ Predicate rv = null; for (Predicate b : exprs){ - rv = rv == null ? b : ExpressionUtils.or(rv,b); + if (b != null) { + rv = rv == null ? b : ExpressionUtils.or(rv,b); + } } return rv; } diff --git a/querydsl-core/src/test/java/com/mysema/query/BooleanBuilderTest.java b/querydsl-core/src/test/java/com/mysema/query/BooleanBuilderTest.java index 157fc5bb8..22efeff4d 100644 --- a/querydsl-core/src/test/java/com/mysema/query/BooleanBuilderTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/BooleanBuilderTest.java @@ -23,6 +23,35 @@ public class BooleanBuilderTest { private final BooleanExpression second = BooleanConstant.FALSE; + @Test + public void AndAnyOf() { + BooleanBuilder builder = new BooleanBuilder(); + builder.andAnyOf(first, null); + assertEquals(first, builder.getValue()); + } + + @Test + public void AndAnyOf2() { + BooleanBuilder builder = new BooleanBuilder(); + builder.andAnyOf(null, first); + assertEquals(first, builder.getValue()); + } + + + @Test + public void OrAllOf() { + BooleanBuilder builder = new BooleanBuilder(); + builder.orAllOf(first, null); + assertEquals(first, builder.getValue()); + } + + @Test + public void OrAllOf2() { + BooleanBuilder builder = new BooleanBuilder(); + builder.orAllOf(null, first); + assertEquals(first, builder.getValue()); + } + @Test(expected=QueryException.class) public void WrappedBooleanBuilder(){ new BooleanBuilder(new BooleanBuilder()); diff --git a/querydsl-core/src/test/java/com/mysema/query/support/ExpressionsTest.java b/querydsl-core/src/test/java/com/mysema/query/support/ExpressionsTest.java index c943103a6..771a99428 100644 --- a/querydsl-core/src/test/java/com/mysema/query/support/ExpressionsTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/support/ExpressionsTest.java @@ -23,11 +23,25 @@ public class ExpressionsTest { public void AllOf() { assertEquals("a && b", Expressions.allOf(a, b).toString()); } + + @Test + public void AllOf_With_Nulls() { + assertEquals("a && b", Expressions.allOf(a, b, null).toString()); + assertEquals("a", Expressions.allOf(a, null).toString()); + assertEquals("a", Expressions.allOf(null, a).toString()); + } @Test public void AnyOf() { assertEquals("a || b", Expressions.anyOf(a, b).toString()); } + + @Test + public void AnyOf_With_Nulls() { + assertEquals("a || b", Expressions.anyOf(a, b, null).toString()); + assertEquals("a", Expressions.anyOf(a, null).toString()); + assertEquals("a", Expressions.anyOf(null, a).toString()); + } @Test public void Constant() { diff --git a/querydsl-core/src/test/java/com/mysema/query/types/expr/BooleanExpressionTest.java b/querydsl-core/src/test/java/com/mysema/query/types/expr/BooleanExpressionTest.java index ac9eaf4b3..2583f169e 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/expr/BooleanExpressionTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/expr/BooleanExpressionTest.java @@ -21,6 +21,20 @@ public class BooleanExpressionTest { public void AllOf(){ assertEquals(a.and(b).and(c), BooleanExpression.allOf(a, b, c)); } + + @Test + public void AllOf_With_Nulls() { + assertEquals("a && b", BooleanExpression.allOf(a, b, null).toString()); + assertEquals("a", BooleanExpression.allOf(a, null).toString()); + assertEquals("a", BooleanExpression.allOf(null, a).toString()); + } + + @Test + public void AnyOf_With_Nulls() { + assertEquals("a || b", BooleanExpression.anyOf(a, b, null).toString()); + assertEquals("a", BooleanExpression.anyOf(a, null).toString()); + assertEquals("a", BooleanExpression.anyOf(null, a).toString()); + } @Test public void AndAnyOf(){