From 80e653a1788c97a0721ac832bed63ec5d441fa53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 28 Nov 2012 16:39:17 +0200 Subject: [PATCH] added nullif tests --- .../query/collections/ColQueryFunctions.java | 8 ++++++++ .../query/collections/ColQueryTemplates.java | 2 ++ .../test/java/com/mysema/query/FilterFactory.java | 2 +- .../java/com/mysema/query/ProjectionsFactory.java | 3 +++ .../com/mysema/query/AbstractStandardTest.java | 1 + .../test/java/com/mysema/query/HibernateBase.java | 3 +++ .../src/test/java/com/mysema/query/JPABase.java | 2 +- .../java/com/mysema/query/JPAProviderRule.java | 3 +++ .../test/java/com/mysema/query/NoHibernate.java | 14 ++++++++++++++ .../java/com/mysema/testutil/JPATestRunner.java | 3 +++ 10 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 querydsl-jpa/src/test/java/com/mysema/query/NoHibernate.java 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 91155e247..31fa3aa25 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 @@ -64,6 +64,14 @@ public final class ColQueryFunctions { } return null; } + + public static T nullif(T first, T second) { + if (first.equals(second)) { + return null; + } else { + return first; + } + } public static int getDayOfMonth(Date date){ return getField(date, Calendar.DAY_OF_MONTH); diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryTemplates.java b/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryTemplates.java index bf4c7d37a..08593cfe1 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryTemplates.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/ColQueryTemplates.java @@ -81,6 +81,8 @@ public class ColQueryTemplates extends JavaTemplates { // coalesce add(Ops.COALESCE, functions + ".coalesce({0})"); + + add(Ops.NULLIF, functions + ".nullif({0}, {1})"); } diff --git a/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java b/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java index 7c03d4809..9870ce8e0 100644 --- a/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java +++ b/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java @@ -327,7 +327,7 @@ public class FilterFactory { } // rv.add(expr.in(IntervalImpl.create("A", "Z"))); - + return rv; } diff --git a/querydsl-core/src/test/java/com/mysema/query/ProjectionsFactory.java b/querydsl-core/src/test/java/com/mysema/query/ProjectionsFactory.java index a62525feb..060b27cdd 100644 --- a/querydsl-core/src/test/java/com/mysema/query/ProjectionsFactory.java +++ b/querydsl-core/src/test/java/com/mysema/query/ProjectionsFactory.java @@ -219,6 +219,9 @@ public class ProjectionsFactory { rv.add(expr.trim()); rv.add(expr.upper()); + + rv.add(expr.nullif("xxx")); + return rv; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractStandardTest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractStandardTest.java index 884fa2b1e..4cdc78489 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractStandardTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractStandardTest.java @@ -390,6 +390,7 @@ public abstract class AbstractStandardTest { } @Test + @NoHibernate public void Constant() { //select cat.id, ?1 as const from Cat cat query().from(cat).list(new QTuple(cat.id, Expressions.constantAs("abc", new StringPath("const")))); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/HibernateBase.java b/querydsl-jpa/src/test/java/com/mysema/query/HibernateBase.java index 45792e115..642a021d8 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/HibernateBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/HibernateBase.java @@ -44,6 +44,9 @@ import com.mysema.testutil.HibernateTestRunner; @RunWith(HibernateTestRunner.class) public class HibernateBase extends AbstractStandardTest { + @Rule + public static MethodRule jpaProviderRule = new JPAProviderRule(); + @Rule public static MethodRule targetRule = new TargetRule(); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java b/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java index 3c31403ae..53e753fbe 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java @@ -48,7 +48,7 @@ public class JPABase extends AbstractStandardTest { public static MethodRule targetRule = new TargetRule(); @Rule - public static MethodRule hibernateOnly = new JPAProviderRule(); + public static MethodRule jpaProviderRule = new JPAProviderRule(); private EntityManager entityManager; diff --git a/querydsl-jpa/src/test/java/com/mysema/query/JPAProviderRule.java b/querydsl-jpa/src/test/java/com/mysema/query/JPAProviderRule.java index 1c9d3ffec..4cecaeda6 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/JPAProviderRule.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/JPAProviderRule.java @@ -19,6 +19,7 @@ public class JPAProviderRule implements MethodRule { boolean noEclipseLink = hasAnnotation(method, NoEclipseLink.class); boolean noOpenJPA = hasAnnotation(method, NoOpenJPA.class); boolean noBatooJPA = hasAnnotation(method, NoBatooJPA.class); + boolean noHibernate = hasAnnotation(method, NoHibernate.class); String mode = Mode.mode.get(); if (noEclipseLink && mode.contains("-eclipselink")) { return EmptyStatement.DEFAULT; @@ -26,6 +27,8 @@ public class JPAProviderRule implements MethodRule { return EmptyStatement.DEFAULT; } else if (noBatooJPA && mode.contains("-batoo")) { return EmptyStatement.DEFAULT; + } else if (noHibernate && !mode.contains("-")) { + return EmptyStatement.DEFAULT; } else { return base; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/NoHibernate.java b/querydsl-jpa/src/test/java/com/mysema/query/NoHibernate.java new file mode 100644 index 000000000..065297157 --- /dev/null +++ b/querydsl-jpa/src/test/java/com/mysema/query/NoHibernate.java @@ -0,0 +1,14 @@ +package com.mysema.query; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.TYPE}) +@Inherited +public @interface NoHibernate { + +} diff --git a/querydsl-jpa/src/test/java/com/mysema/testutil/JPATestRunner.java b/querydsl-jpa/src/test/java/com/mysema/testutil/JPATestRunner.java index e1d6a6a47..c64864de5 100644 --- a/querydsl-jpa/src/test/java/com/mysema/testutil/JPATestRunner.java +++ b/querydsl-jpa/src/test/java/com/mysema/testutil/JPATestRunner.java @@ -87,6 +87,9 @@ public class JPATestRunner extends BlockJUnit4ClassRunner { private void start() throws Exception { String mode = Mode.mode.get(); + if (mode == null) { + mode = "h2"; + } System.out.println(mode); isDerby = mode.contains("derby"); if (isDerby) {