From 9037b0952bb446d7c419b1ab8424e30f9660e76d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 8 Apr 2014 21:24:31 +0300 Subject: [PATCH 1/2] Add Comparable support --- .../mysema/query/types/expr/CaseBuilder.java | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java index 9467b6049..c78cf719b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java @@ -13,18 +13,17 @@ */ package com.mysema.query.types.expr; -import java.sql.Time; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Nullable; - import com.mysema.query.types.ConstantImpl; import com.mysema.query.types.Expression; import com.mysema.query.types.NullExpression; import com.mysema.query.types.Ops; +import javax.annotation.Nullable; +import java.sql.Time; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; + /** * CaseBuilder enables the construction of typesafe case-when-then-else * constructs : @@ -200,6 +199,26 @@ public final class CaseBuilder { return thenBoolean(ConstantImpl.create(b)); } + // Comparable + + public Cases> then(ComparableExpression expr) { + return thenComparable(expr); + } + + public Cases> thenComparable(Expression expr) { + return new Cases>((Class)expr.getType()) { + @Override + protected ComparableExpression createResult(Class type, Expression last) { + return ComparableOperation.create(type, Ops.CASE, last); + } + + }.addCase(when, expr); + } + + public Cases> then(A arg) { + return thenComparable(ConstantImpl.create(arg)); + } + // Date public Cases> then(DateExpression expr) { From 00f058a9596046ef8e0af57f65b76dae122f5e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Apr 2014 11:50:51 +0300 Subject: [PATCH 2/2] Create specialized versions based on runtime type --- .../mysema/query/types/expr/CaseBuilder.java | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java index c78cf719b..cdf4a19fd 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java @@ -163,8 +163,28 @@ public final class CaseBuilder { this.when = b; } - @SuppressWarnings("unchecked") public Cases> then(Expression expr) { + if (expr instanceof BooleanExpression) { + return (Cases) then((BooleanExpression) expr); + } else if (expr instanceof StringExpression) { + return (Cases) then((StringExpression) expr); + } else if (expr instanceof NumberExpression) { + return then((NumberExpression) expr); + } else if (expr instanceof DateExpression) { + return then((DateExpression) expr); + } else if (expr instanceof DateTimeExpression) { + return then((DateTimeExpression) expr); + } else if (expr instanceof TimeExpression) { + return then((TimeExpression) expr); + } else if (expr instanceof ComparableExpression) { + return then((ComparableExpression) expr); + } else { + return thenSimple(expr); + } + } + + @SuppressWarnings("unchecked") + private Cases> thenSimple(Expression expr) { return new Cases>((Class)expr.getType()) { @Override protected SimpleExpression createResult(Class type, Expression last) { @@ -175,12 +195,12 @@ public final class CaseBuilder { } public Cases> then(A constant) { - return then(ConstantImpl.create(constant)); + return thenSimple(ConstantImpl.create(constant)); } // Boolean - public Cases then(BooleanExpression expr) { + public Cases then(BooleanExpression expr) { return thenBoolean(expr); } @@ -205,7 +225,7 @@ public final class CaseBuilder { return thenComparable(expr); } - public Cases> thenComparable(Expression expr) { + private Cases> thenComparable(Expression expr) { return new Cases>((Class)expr.getType()) { @Override protected ComparableExpression createResult(Class type, Expression last) { @@ -235,7 +255,7 @@ public final class CaseBuilder { }.addCase(when, expr); } - public Cases> thenDate(java.sql.Date date) { + public Cases> then(java.sql.Date date) { return thenDate(ConstantImpl.create(date)); } @@ -255,11 +275,11 @@ public final class CaseBuilder { }.addCase(when, expr); } - public Cases> thenDateTime(Timestamp ts) { + public Cases> then(Timestamp ts) { return thenDateTime(ConstantImpl.create(ts)); } - public Cases> thenDateTime(java.util.Date date) { + public Cases> then(java.util.Date date) { return thenDateTime(ConstantImpl.create(date)); }