From 2da96256bb75dedcdb8a913dc5bd55292515545e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 21 Jan 2014 19:51:27 +0200 Subject: [PATCH] Add Enum support #635 --- .../mysema/query/types/expr/CaseBuilder.java | 20 +++++++++++++++++++ .../mysema/query/types/CaseBuilderTest.java | 19 ++++++++++++++++++ 2 files changed, 39 insertions(+) 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 96a1c3300..9467b6049 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 @@ -244,6 +244,26 @@ public final class CaseBuilder { return thenDateTime(ConstantImpl.create(date)); } + // Enum + + public > Cases> then(EnumExpression expr) { + return thenEnum(expr); + } + + @SuppressWarnings("unchecked") + private > Cases> thenEnum(Expression expr) { + return new Cases>((Class)expr.getType()) { + @Override + protected EnumExpression createResult(Class type, Expression last) { + return EnumOperation.create(type, Ops.CASE, last); + } + }.addCase(when, expr); + } + + public > Cases> then(T arg) { + return thenEnum(ConstantImpl.create(arg)); + } + // Number public > Cases> then(NumberExpression expr) { diff --git a/querydsl-core/src/test/java/com/mysema/query/types/CaseBuilderTest.java b/querydsl-core/src/test/java/com/mysema/query/types/CaseBuilderTest.java index 223ab153f..1f52f7795 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/CaseBuilderTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/CaseBuilderTest.java @@ -22,6 +22,7 @@ import org.junit.Test; import com.mysema.query.types.expr.BooleanExpression; import com.mysema.query.types.expr.CaseBuilder; +import com.mysema.query.types.expr.EnumExpression; import com.mysema.query.types.expr.NumberExpression; import com.mysema.query.types.expr.SimpleExpression; import com.mysema.query.types.expr.StringExpression; @@ -29,6 +30,10 @@ import com.mysema.query.types.template.BooleanTemplate; public class CaseBuilderTest { + public enum Gender { + MALE, FEMALE + } + public static class Customer{ private long annualSpending; public long getAnnualSpending() { @@ -58,6 +63,20 @@ public class CaseBuilderTest { "end", cases.toString()); } + @Test + public void EnumTyped() { + Customer c = alias(Customer.class, "customer"); + EnumExpression cases = new CaseBuilder() + .when($(c.getAnnualSpending()).gt(10000)).then(Gender.MALE) + .otherwise(Gender.FEMALE); + + assertEquals( + "case " + + "when customer.annualSpending > 10000 then MALE " + + "else FEMALE " + + "end", cases.toString()); + } + @Test public void NumberTyped() { Customer c = alias(Customer.class, "customer");