added more wrapper types

This commit is contained in:
Timo Westkämper 2011-11-16 19:59:51 +02:00
parent 235ef3648c
commit dcb28b4c8a
5 changed files with 53 additions and 30 deletions

BIN
querydsl-scala/.cache Normal file

Binary file not shown.

View File

@ -15,7 +15,7 @@
<packaging>jar</packaging>
<properties>
<scala.version>2.8.1</scala.version>
<scala.version>2.9.1</scala.version>
<hibernate.version>3.5.1-Final</hibernate.version>
<hibernate.validator.version>4.0.2.GA</hibernate.validator.version>
</properties>

View File

@ -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))
}

View File

@ -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())
}

View File

@ -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