diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryFunctions.java b/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryFunctions.java index 14e406e75..665194d35 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryFunctions.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryFunctions.java @@ -3,10 +3,17 @@ package com.mysema.query.collections; import java.util.Calendar; import java.util.Date; +import javax.annotation.Nullable; + +/** + * @author tiwe + * + */ public final class ColQueryFunctions { private ColQueryFunctions(){} + @Nullable public static T coalesce(T... args){ for (T arg : args){ if (arg != null){ diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/Coalesce.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/Coalesce.java index a5cca1570..93560074f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/Coalesce.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/Coalesce.java @@ -21,7 +21,8 @@ import com.mysema.query.types.Visitor; * * @param */ -public class Coalesce extends ESimple{ +@SuppressWarnings("unchecked") +public class Coalesce extends EComparable{ private static final long serialVersionUID = 445439522266250417L; @@ -32,32 +33,47 @@ public class Coalesce extends ESimple{ add(exprs); } - @SuppressWarnings("unchecked") public Coalesce(Expr ...exprs){ this((Class)(exprs.length > 0 ? exprs[0].getType() : Object.class), exprs); } + @Override + public void accept(Visitor v) { + OSimple.create(getType(), Ops.COALESCE, getExpressionList()).accept(v); + } + public Coalesce add(Expr... exprs){ for (Expr expr : exprs){ this.exprs.add(expr); } return this; } - + public Coalesce add(T constant){ this.exprs.add(ExprConst.create(constant)); return this; } - - @Override - public void accept(Visitor v) { - Expr arg = exprs.get(0); - for (int i = 1; i < exprs.size(); i++){ - arg = OSimple.create(List.class, Ops.LIST, arg, exprs.get(i)); - } - OSimple.create(getType(), Ops.COALESCE, arg).accept(v); + + public EDate asDate(){ + return (EDate) ODate.create(getType(), Ops.COALESCE, getExpressionList()); } - + + public EDateTime asDateTime(){ + return (EDateTime) ODateTime.create(getType(), Ops.COALESCE, getExpressionList()); + } + + public ENumber asNumber(){ + return ONumber.create((Class)getType(), Ops.COALESCE, getExpressionList()); + } + + public EString asString(){ + return OString.create(Ops.COALESCE, getExpressionList()); + } + + public ETime asTime(){ + return (ETime) OTime.create(getType(), Ops.COALESCE, getExpressionList()); + } + @Override public boolean equals(Object o) { if (o == this){ @@ -70,4 +86,17 @@ public class Coalesce extends ESimple{ } } + @Override + public int hashCode(){ + return exprs.hashCode(); + } + + private Expr getExpressionList(){ + Expr arg = exprs.get(0); + for (int i = 1; i < exprs.size(); i++){ + arg = OSimple.create(List.class, Ops.LIST, arg, exprs.get(i)); + } + return arg; + } + } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/OBoolean.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/OBoolean.java index 0ef290757..82b4446d3 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/OBoolean.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/OBoolean.java @@ -24,17 +24,17 @@ public class OBoolean extends EBoolean implements Operation { private static final long serialVersionUID = 7432281499861357581L; - public static EBoolean create(Operator op, Expr... args){ + public static EBoolean create(Operator op, Expr... args){ return new OBoolean(op, args); } private final Operation opMixin; - OBoolean(Operator op, Expr... args) { + OBoolean(Operator op, Expr... args) { this(op, Arrays.asList(args)); } - OBoolean(Operator op, List> args) { + OBoolean(Operator op, List> args) { opMixin = new OperationMixin(this, op, args); } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/OString.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/OString.java index 608db8590..416dd3db7 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/OString.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/OString.java @@ -23,17 +23,17 @@ public class OString extends EString implements Operation { private static final long serialVersionUID = 6846556373847139549L; - public static EString create(Operator op, Expr... args){ + public static EString create(Operator op, Expr... args){ return new OString(op, args); } private final Operation opMixin; - OString(Operator op, Expr... args) { + OString(Operator op, Expr... args) { this(op, Arrays.asList(args)); } - OString(Operator op, List> args) { + OString(Operator op, List> args) { this.opMixin = new OperationMixin(this, op, args); } diff --git a/querydsl-core/src/main/java/com/mysema/util/MathUtils.java b/querydsl-core/src/main/java/com/mysema/util/MathUtils.java index 300cc7d26..df833e723 100644 --- a/querydsl-core/src/main/java/com/mysema/util/MathUtils.java +++ b/querydsl-core/src/main/java/com/mysema/util/MathUtils.java @@ -45,7 +45,6 @@ public final class MathUtils { }else{ rv = new BigDecimal(num.toString()); } - rv = num; }else if (type.equals(BigInteger.class)){ if (num instanceof BigInteger){ rv = num; diff --git a/querydsl-core/src/test/java/com/mysema/query/types/expr/CoalesceTest.java b/querydsl-core/src/test/java/com/mysema/query/types/expr/CoalesceTest.java index d3f10d085..5f8c4cae3 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/expr/CoalesceTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/expr/CoalesceTest.java @@ -1,26 +1,39 @@ package com.mysema.query.types.expr; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import org.junit.Test; import com.mysema.query.types.path.PString; +@SuppressWarnings("unchecked") public class CoalesceTest { - @SuppressWarnings("unchecked") + PString firstname = new PString("firstname"); + + PString lastname = new PString("lastname"); + @Test - public void withList(){ - PString firstname = new PString("firstname"); - PString lastname = new PString("lastname"); + public void withList(){ Coalesce c = new Coalesce(firstname, lastname).add("xxx"); assertEquals("coalesce(firstname, lastname, xxx)", c.toString()); } - - @SuppressWarnings("unchecked") + @Test public void withSingleArg(){ Coalesce c = new Coalesce().add("xxx"); assertEquals("coalesce(xxx)", c.toString()); } + + @Test + public void asComparable(){ + Coalesce c = new Coalesce(firstname, lastname); + c.asc(); + } + + @Test + public void asString(){ + Coalesce c = new Coalesce(firstname, lastname); + c.asString().lower(); + } }