#595724 : fixed JoinExpression.condition behavior

This commit is contained in:
Timo Westkämper 2010-06-18 14:07:56 +00:00
parent 5ff6041afa
commit fa01979945
5 changed files with 55 additions and 10 deletions

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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

View File

@ -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());
}
}