All Downloads are FREE. Search and download functionalities are using the official Maven repository.

squeryl.ExpressionConversion.scala Maven / Gradle / Ivy

There is a newer version: 0.5.1
Show newest version
package com.github.aselab.activerecord.squeryl

import com.github.aselab.activerecord._
import com.github.aselab.activerecord.dsl._
import org.squeryl.dsl._
import java.util.{Date, UUID}
import java.sql.Timestamp
import reflections._

class ExpressionConversion(field: FieldInfo) {
  import ReflectionUtil._

  def toExpression(value: Any): dsl.TypedExpression[_, _] = field match {
    case f if f.is[String] => value.toOption[String]
    case f if f.is[Boolean] => value.toOption[Boolean]
    case f if f.is[Int] => value.toOption[Int]
    case f if f.is[Long] => value.toOption[Long]
    case f if f.is[Float] => value.toOption[Float]
    case f if f.is[Double] => value.toOption[Double]
    case f if f.is[BigDecimal] => value.toOption[BigDecimal]
    case f if f.is[Timestamp] => value.toOption[Timestamp]
    case f if f.is[Date] => value.toOption[Date]
    case f if f.is[UUID] => value.toOption[UUID]
  }

  def toEqualityExpression(v1: => Any, v2: => Any): ast.EqualityExpression =
    new ast.EqualityExpression(toExpression(v1), toExpression(v2))

  def toOrderByExpression(v1: => Any, order: String): ExpressionNode = {
    val arg = new OrderByArg(toExpression(v1))
    order.toLowerCase match {
      case "asc" => arg.asc
      case "desc" => arg.desc
      case _ => throw new IllegalArgumentException("order must be 'asc' or 'desc'")
    }
  }

  def toInExpression(v1: Any, v2: List[Any]): ast.InclusionOperator = try {
    new ast.InclusionOperator(toExpression(v1), new ast.RightHandSideOfIn(new ast.ConstantExpressionNodeList(v2, field match {
    case f if f.is[String] => optionStringTEF.createOutMapper
    case f if f.is[Boolean] => optionBooleanTEF.createOutMapper
    case f if f.is[Int] => optionIntTEF.createOutMapper
    case f if f.is[Long] => optionLongTEF.createOutMapper
    case f if f.is[Float] => optionFloatTEF.createOutMapper
    case f if f.is[Double] => optionDoubleTEF.createOutMapper
    case f if f.is[BigDecimal] => optionBigDecimalTEF.createOutMapper
    case f if f.is[Timestamp] => optionTimestampTEF.createOutMapper
    case f if f.is[Date] => optionDateTEF.createOutMapper
    case f if f.is[UUID] => optionUUIDTEF.createOutMapper
  })))
  } catch {
    case e: RuntimeException => throw ActiveRecordException.unsupportedType(field.name)
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy