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 64bcda215a..5d300306c4 100644 --- a/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala +++ b/jOOQ-scala/src/main/scala/org/jooq/scala/Conversions.scala @@ -44,6 +44,9 @@ import org.jooq._ import org.jooq.impl._ import org.jooq.impl.DSL._ +import _root_.scala.collection.convert.WrapAsScala +import _root_.scala.collection.convert.Wrappers.JMapWrapper + /** * jOOQ type conversions used to enhance the jOOQ Java API with Scala Traits *

@@ -83,6 +86,46 @@ import org.jooq.impl.DSL._ */ object Conversions { + // ------------------------------------------------------------------------- + // Enhanced jOOQ types + // ------------------------------------------------------------------------- + + implicit class ScalaResultQuery[R <: Record](val query: ResultQuery[R]) { + import _root_.scala.collection.mutable._ + + def fetchAnyOption () : Option[R] = Option(query.fetchAny) + def fetchAnyOption[E] (mapper : RecordMapper[_ >: R, E]) : Option[E] = Option(query.fetchAny(mapper)) + def fetchAnyOption[T] (field : Field[T]) : Option[T] = Option(query.fetchAny(field)) + def fetchAnyOption[T] (field : Field[_], newType : Class[_ <: T]) : Option[T] = Option(query.fetchAny(field, newType)) + def fetchAnyOption[T, U] (field : Field[T], converter : Converter[_ >: T, U]) : Option[U] = Option(query.fetchAny[T, U](field, converter)) + def fetchAnyOption (fieldIndex : Int) : Option[_] = Option(query.fetchAny(fieldIndex)) + def fetchAnyOption[T] (fieldIndex : Int, newType : Class[_ <: T]) : Option[_] = Option(query.fetchAny(fieldIndex, newType)) + def fetchAnyOption[T, U] (fieldIndex : Int, converter : Converter[_ >: T, U]) : Option[_] = Option(query.fetchAny(fieldIndex, converter)) + def fetchAnyOption (fieldName : String) : Option[_] = Option(query.fetchAny(fieldName)) + def fetchAnyOption[T] (fieldName : String, newType : Class[_ <: T]) : Option[_] = Option(query.fetchAny(fieldName, newType)) + def fetchAnyOption[U] (fieldName : String, converter : Converter[_, U]) : Option[_] = Option(query.fetchAny(fieldName, converter)) + def fetchAnyOptionArray () : Option[Array[AnyRef]] = Option(query.fetchAnyArray) + def fetchAnyOptionInto[E] (newType : Class[_ <: E]) : Option[E] = Option(query.fetchAnyInto(newType)) + def fetchAnyOptionInto[Z <: Record](table : Table[Z]) : Option[Z] = Option(query.fetchAnyInto(table)) + def fetchAnyOptionMap () : Option[Map[String, AnyRef]] = Option(query.fetchAnyMap).map(m => WrapAsScala.mapAsScalaMap(m)) + + def fetchOneOption () : Option[R] = Option(query.fetchOne) + def fetchOneOption[E] (mapper : RecordMapper[_ >: R, E]) : Option[E] = Option(query.fetchOne(mapper)) + def fetchOneOption[T] (field : Field[T]) : Option[T] = Option(query.fetchOne(field)) + def fetchOneOption[T] (field : Field[_], newType : Class[_ <: T]) : Option[T] = Option(query.fetchOne(field, newType)) + def fetchOneOption[T, U] (field : Field[T], converter : Converter[_ >: T, U]) : Option[U] = Option(query.fetchOne[T, U](field, converter)) + def fetchOneOption (fieldIndex : Int) : Option[_] = Option(query.fetchOne(fieldIndex)) + def fetchOneOption[T] (fieldIndex : Int, newType : Class[_ <: T]) : Option[_] = Option(query.fetchOne(fieldIndex, newType)) + def fetchOneOption[T, U] (fieldIndex : Int, converter : Converter[_ >: T, U]) : Option[_] = Option(query.fetchOne(fieldIndex, converter)) + def fetchOneOption (fieldName : String) : Option[_] = Option(query.fetchOne(fieldName)) + def fetchOneOption[T] (fieldName : String, newType : Class[_ <: T]) : Option[_] = Option(query.fetchOne(fieldName, newType)) + def fetchOneOption[U] (fieldName : String, converter : Converter[_, U]) : Option[_] = Option(query.fetchOne(fieldName, converter)) + def fetchOneOptionArray () : Option[Array[AnyRef]] = Option(query.fetchOneArray) + def fetchOneOptionInto[E] (newType : Class[_ <: E]) : Option[E] = Option(query.fetchOneInto(newType)) + def fetchOneOptionInto[Z <: Record](table : Table[Z]) : Option[Z] = Option(query.fetchOneInto(table)) + def fetchOneOptionMap () : Option[Map[String, AnyRef]] = Option(query.fetchOneMap).map(m => WrapAsScala.mapAsScalaMap(m)) + } + // ------------------------------------------------------------------------- // Traits // ------------------------------------------------------------------------- diff --git a/jOOQ-scala/src/test/scala/org/jooq/scala/example/Test.scala b/jOOQ-scala/src/test/scala/org/jooq/scala/example/Test.scala index d836981a11..ebdc73669d 100644 --- a/jOOQ-scala/src/test/scala/org/jooq/scala/example/Test.scala +++ b/jOOQ-scala/src/test/scala/org/jooq/scala/example/Test.scala @@ -108,5 +108,16 @@ object Test { ORDER BY a.id, b.id """) ) + + // Option conversions + for (i <- 1 to 3) { + f.select (T_AUTHOR.FIRST_NAME, T_AUTHOR.LAST_NAME) + .from (T_AUTHOR) + .where (T_AUTHOR.ID === i) + .fetchOneOption() match { + case Some(author) => println("Author found: " + author.getValue(T_AUTHOR.FIRST_NAME) + " " + author.getValue(T_AUTHOR.LAST_NAME)) + case None => println("No author found for ID: " + i) + } + } } } \ No newline at end of file