mirror of
https://github.com/querydsl/querydsl.git
synced 2026-06-16 21:01:10 +08:00
#595724 : fixed JoinExpression.condition behavior
This commit is contained in:
parent
5ff6041afa
commit
fa01979945
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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<Object> flags = new HashSet<Object>();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user