diff --git a/querydsl-core/src/main/java/com/mysema/query/BooleanBuilder.java b/querydsl-core/src/main/java/com/mysema/query/BooleanBuilder.java index 377da3407..b3869a389 100644 --- a/querydsl-core/src/main/java/com/mysema/query/BooleanBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/BooleanBuilder.java @@ -10,6 +10,8 @@ import java.util.List; import javax.annotation.Nullable; +import org.apache.commons.lang.ObjectUtils; + import com.mysema.query.types.Expr; import com.mysema.query.types.Operation; import com.mysema.query.types.Operator; @@ -84,7 +86,7 @@ public final class BooleanBuilder extends EBoolean implements Cloneable, Operati if (o == this){ return true; }else if (o instanceof BooleanBuilder){ - return ((BooleanBuilder)o).getValue().equals(expr); + return ObjectUtils.equals(((BooleanBuilder)o).getValue(), expr); }else{ return false; } diff --git a/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java b/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java index 1d9cfe770..8ee0d3740 100644 --- a/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java @@ -88,7 +88,7 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { @Override public void addJoinCondition(EBoolean o) { if (!joins.isEmpty()) { - joins.get(joins.size() - 1).setCondition(o); + joins.get(joins.size() - 1).addCondition(o); } } diff --git a/querydsl-core/src/main/java/com/mysema/query/JoinExpression.java b/querydsl-core/src/main/java/com/mysema/query/JoinExpression.java index c3888e0b6..d6c95ac52 100644 --- a/querydsl-core/src/main/java/com/mysema/query/JoinExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/JoinExpression.java @@ -21,8 +21,7 @@ import com.mysema.query.types.expr.EBoolean; */ public final class JoinExpression { - // mutable - private EBoolean condition; + private BooleanBuilder condition = new BooleanBuilder(); private final Set flags = new HashSet(); @@ -36,11 +35,11 @@ public final class JoinExpression { } public EBoolean getCondition() { - return condition; + return condition.getValue(); } - public void setCondition(EBoolean condition) { - this.condition = condition; + public void addCondition(EBoolean c) { + condition.and(c); } public Expr getTarget() { @@ -66,7 +65,7 @@ public final class JoinExpression { public String toString() { StringBuilder builder = new StringBuilder(); builder.append(type).append(" ").append(target); - if (condition != null) { + if (condition.getValue() != null) { builder.append(" ON ").append(condition); } return builder.toString(); diff --git a/querydsl-core/src/test/java/com/mysema/query/JoinExpressionTest.java b/querydsl-core/src/test/java/com/mysema/query/JoinExpressionTest.java index 0834960de..4b4bb08b0 100644 --- a/querydsl-core/src/test/java/com/mysema/query/JoinExpressionTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/JoinExpressionTest.java @@ -24,9 +24,12 @@ public class JoinExpressionTest { } @Test - public void testSetCondition() { - je.setCondition(EBooleanConst.TRUE); + public void testAddCondition() { + je.addCondition(EBooleanConst.TRUE); assertEquals(EBooleanConst.TRUE, je.getCondition()); + + je.addCondition(EBooleanConst.FALSE); + assertEquals(EBooleanConst.TRUE.and(EBooleanConst.FALSE), je.getCondition()); } @Test diff --git a/querydsl-core/src/test/java/com/mysema/query/support/QueryMixinTest.java b/querydsl-core/src/test/java/com/mysema/query/support/QueryMixinTest.java new file mode 100644 index 000000000..50a0dbbd9 --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/query/support/QueryMixinTest.java @@ -0,0 +1,41 @@ +package com.mysema.query.support; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import org.junit.Test; + +import com.mysema.query.JoinExpression; +import com.mysema.query.domain.QCommonPersistence; +import com.mysema.query.types.expr.EBoolean; +import com.mysema.query.types.path.PathMetadataFactory; + + +public class QueryMixinTest { + + private QueryMixin mixin = new QueryMixin(); + + private QCommonPersistence entity = new QCommonPersistence(PathMetadataFactory.forVariable("entity")); + + @Test + public void getJoins_with_condition(){ + mixin.innerJoin(entity); + mixin.on(entity.version.isNull(), entity.version.isNotNull()); + + assertEquals(1, mixin.getMetadata().getJoins().size()); + JoinExpression je = mixin.getMetadata().getJoins().get(0); + assertEquals(entity, je.getTarget()); + assertEquals(EBoolean.allOf(entity.version.isNull(), entity.version.isNotNull()), je.getCondition()); + } + + @Test + public void getJoins_no_condition(){ + mixin.innerJoin(entity); + + assertEquals(1, mixin.getMetadata().getJoins().size()); + JoinExpression je = mixin.getMetadata().getJoins().get(0); + assertEquals(entity, je.getTarget()); + assertNull(je.getCondition()); + } + +}