diff --git a/querydsl-scala/.cache b/querydsl-scala/.cache new file mode 100644 index 000000000..df3c359d0 Binary files /dev/null and b/querydsl-scala/.cache differ diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 23a1da8bc..071d822d2 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -15,7 +15,7 @@ jar - 2.8.1 + 2.9.1 3.5.1-Final 4.0.2.GA diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/Helpers.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/Helpers.scala new file mode 100644 index 000000000..25b5e0cd4 --- /dev/null +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/Helpers.scala @@ -0,0 +1,51 @@ +package com.mysema.query.scala + +import scala.collection.JavaConversions._ +import com.mysema.query._ +import com.mysema.query.types._ + +object Helpers { + + implicit def toRichSimpleProjectable[T](p: SimpleProjectable[T]) = new RichSimpleProjectable(p) + + implicit def toRichProjectable(p: Projectable) = new RichProjectable(p) + +} + +class RichSimpleProjectable[T](private val p: SimpleProjectable[T]) { + + def select: List[T] = p.list.toList + + def single: Option[T] = Option(p.singleResult()) + + def unique: Option[T] = Option(p.uniqueResult()) + +} + +class RichProjectable(private val p: Projectable) { + + def select[T](expr: Expression[T]): List[T] = p.list(expr).toList + + def select[T,U](expr1: Expression[T], expr2: Expression[U]): List[(T,U)] = { + p.list(expr1, expr2).toList map(r => (r(0).asInstanceOf[T], r(1).asInstanceOf[U])) + } + + def select[T,U,V](expr1: Expression[T], expr2: Expression[U], expr3: Expression[V]): List[(T,U,V)] = { + p.list(expr1, expr2, expr3).toList map(r => (r(0).asInstanceOf[T], r(1).asInstanceOf[U], r(2).asInstanceOf[V])) + } + + def select[T,U,V,W](expr1: Expression[T], expr2: Expression[U], expr3: Expression[V], expr4: Expression[W]): List[(T,U,V,W)] = { + p.list(expr1, expr2, expr3, expr4) + .map(r => (r(0).asInstanceOf[T], r(1).asInstanceOf[U], r(2).asInstanceOf[V], r(3).asInstanceOf[W])).toList + } + + // TODO : generalize this + def selectGrouped[K,T,V](expr1: Expression[K], expr2: Expression[T], expr3: Expression[V]): List[(T,List[V])] = { + select(expr1, expr2, expr3).groupBy(_._1).map(_._2).map(r => (r(0)._2, r.map(_._3))).toList + } + + def single[T](expr: Expression[T]): Option[T] = Option(p.singleResult(expr)) + + def unique[T](expr: Expression[T]): Option[T] = Option(p.uniqueResult(expr)) + +} diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/Queries.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/Queries.scala deleted file mode 100644 index c6dfb8ca5..000000000 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/Queries.scala +++ /dev/null @@ -1,28 +0,0 @@ -package com.mysema.query.scala; - -import com.mysema.query._; -import com.mysema.query.types._; - -object Queries { - - implicit def toScalaProjectable(qry: Projectable) = new ScalaProjectable(qry) - - implicit def toScalaProjectable[T](qry: SimpleProjectable[T]) = new SimpleScalaProjectable[T](qry); - -} - -class ScalaProjectable(val qry: Projectable) { - - def unique[T](e: Expression[T]) = Option(qry.uniqueResult(e)) - - def single[T](e: Expression[T]) = Option(qry.singleResult(e)) - -} - -class SimpleScalaProjectable[T](val qry: SimpleProjectable[T]) { - - def unique = Option(qry.uniqueResult()) - - def single = Option(qry.singleResult()) - -} \ No newline at end of file diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/QueriesTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/HelpersTest.scala similarity index 95% rename from querydsl-scala/src/test/scala/com/mysema/query/scala/QueriesTest.scala rename to querydsl-scala/src/test/scala/com/mysema/query/scala/HelpersTest.scala index 502eb6657..53a06422d 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/QueriesTest.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/HelpersTest.scala @@ -2,7 +2,7 @@ package com.mysema.query.scala; //import com.mysema.query._ import com.mysema.query.types._ -import com.mysema.query.scala.Queries._ +import com.mysema.query.scala.Helpers._ import com.mysema.query.scala.Conversions._ import com.mysema.query.jpa.impl.JPAQuery