From 6194e189d7599feabe587b989cf2c8da23cb9fb7 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sat, 1 Sep 2012 12:27:37 +0200 Subject: [PATCH] [#1773] Add a new jOOQ-Scala project and jooq-scala artefactId, to contain jOOQ extensions in the Scala language - Added more operators --- .../scala/org/jooq/scala/Conversions.scala | 6 +++ ...t.scala => ArithmeticExpressionTest.scala} | 4 +- .../scala/test/ComparisonPredicateTest.scala | 54 +++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) rename jOOQ-scala/src/test/scala/org/jooq/scala/test/{OperatorOverloadingTest.scala => ArithmeticExpressionTest.scala} (93%) create mode 100644 jOOQ-scala/src/test/scala/org/jooq/scala/test/ComparisonPredicateTest.scala diff --git a/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala b/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala index 4374358577..3d6fdbcd0d 100644 --- a/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala +++ b/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala @@ -138,6 +138,9 @@ object Conversions { def <=(value : T) : Condition = underlying.lessOrEqual(value) def <=(value : Field[T]) : Condition = underlying.lessOrEqual(value) + + def <=>(value : T) : Condition = underlying.isNotDistinctFrom(value) + def <=>(value : Field[T]) : Condition = underlying.isNotDistinctFrom(value) } /** @@ -192,6 +195,9 @@ object Conversions { def <=(value : T) : Condition def <=(value : Field[T]) : Condition + + def <=>(value : T) : Condition + def <=>(value : Field[T]) : Condition } implicit def asScalaField[T](f : Field[T]): SField[T] = f match { diff --git a/jOOQ-scala/src/test/scala/org/jooq/scala/test/OperatorOverloadingTest.scala b/jOOQ-scala/src/test/scala/org/jooq/scala/test/ArithmeticExpressionTest.scala similarity index 93% rename from jOOQ-scala/src/test/scala/org/jooq/scala/test/OperatorOverloadingTest.scala rename to jOOQ-scala/src/test/scala/org/jooq/scala/test/ArithmeticExpressionTest.scala index faacb3e8f9..ab21b7751c 100644 --- a/jOOQ-scala/src/test/scala/org/jooq/scala/test/OperatorOverloadingTest.scala +++ b/jOOQ-scala/src/test/scala/org/jooq/scala/test/ArithmeticExpressionTest.scala @@ -10,9 +10,9 @@ import org.jooq.conf.Settings import javax.xml.bind.JAXB import org.jooq.conf.SettingsTools -class OperatorOverloadingTest extends FunSuite { +class ArithmeticExpressionTest extends FunSuite { - test("arithmetic") { + test("arithmetic expressions") { val add1 = T_BOOK.ID + T_BOOK.AUTHOR_ID val add2 = T_BOOK.ID + 2 val sub1 = T_BOOK.ID - T_BOOK.AUTHOR_ID diff --git a/jOOQ-scala/src/test/scala/org/jooq/scala/test/ComparisonPredicateTest.scala b/jOOQ-scala/src/test/scala/org/jooq/scala/test/ComparisonPredicateTest.scala new file mode 100644 index 0000000000..cb11e1778f --- /dev/null +++ b/jOOQ-scala/src/test/scala/org/jooq/scala/test/ComparisonPredicateTest.scala @@ -0,0 +1,54 @@ +package org.jooq.scala.test + +import collection.JavaConversions._ +import org.scalatest.FunSuite +import org.jooq._ +import org.jooq.impl._ +import org.jooq.scala.example.h2.Tables._ +import org.jooq.scala.Conversions._ +import org.jooq.conf.Settings +import javax.xml.bind.JAXB +import org.jooq.conf.SettingsTools + +class ComparisonPredicateTest extends FunSuite { + + test("comparison predicate") { + val eq1 = T_BOOK.ID === T_BOOK.AUTHOR_ID + val eq2 = T_BOOK.ID === 1 + val ne1 = T_BOOK.ID !== T_BOOK.AUTHOR_ID + val ne2 = T_BOOK.ID !== 1 + val ne3 = T_BOOK.ID <> T_BOOK.AUTHOR_ID + val ne4 = T_BOOK.ID <> 1 + val gt1 = T_BOOK.ID > T_BOOK.AUTHOR_ID + val gt2 = T_BOOK.ID > 1 + val ge1 = T_BOOK.ID >= T_BOOK.AUTHOR_ID + val ge2 = T_BOOK.ID >= 1 + val lt1 = T_BOOK.ID < T_BOOK.AUTHOR_ID + val lt2 = T_BOOK.ID < 1 + val le1 = T_BOOK.ID <= T_BOOK.AUTHOR_ID + val le2 = T_BOOK.ID <= 1 + + assert("t_book.id = t_book.author_id" == eq1.toString(), eq1.toString()) + assert("t_book.id = 1" == eq2.toString(), eq2.toString()) + assert("t_book.id <> t_book.author_id" == ne1.toString(), ne1.toString()) + assert("t_book.id <> 1" == ne2.toString(), ne2.toString()) + assert("t_book.id <> t_book.author_id" == ne3.toString(), ne3.toString()) + assert("t_book.id <> 1" == ne4.toString(), ne4.toString()) + assert("t_book.id > t_book.author_id" == gt1.toString(), gt1.toString()) + assert("t_book.id > 1" == gt2.toString(), gt2.toString()) + assert("t_book.id >= t_book.author_id" == ge1.toString(), ge1.toString()) + assert("t_book.id >= 1" == ge2.toString(), ge2.toString()) + assert("t_book.id < t_book.author_id" == lt1.toString(), lt1.toString()) + assert("t_book.id < 1" == lt2.toString(), lt2.toString()) + assert("t_book.id <= t_book.author_id" == le1.toString(), le1.toString()) + assert("t_book.id <= 1" == le2.toString(), le2.toString()) + } + + test("distinct predicate") { + val d1 = T_BOOK.ID <=> T_BOOK.AUTHOR_ID + val d2 = T_BOOK.ID <=> 1 + + assert("t_book.id IS NOT DISTINCT FROM t_book.author_id" == d1.toString(), d1.toString()) + assert("t_book.id IS NOT DISTINCT FROM 1" == d2.toString(), d2.toString()) + } +} \ No newline at end of file