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

org.squeryl.pg.PgSchema.scala Maven / Gradle / Ivy

package org.squeryl.pg

import org.squeryl._
import internals.{StatementWriter, FieldMapper}
import dsl.ast.{ViewExpressionNode, ExpressionNode}

class PgSchema(implicit fieldMapper: FieldMapper)
    extends Schema()(fieldMapper) {

  protected def srf[T]()(implicit man: Manifest[T]): ((ExpressionNode*) => View[T]) =
    srf(tableNameFromClass(man.runtimeClass))(man)

  protected def srf[T](name: String)(implicit man: Manifest[T]): ((ExpressionNode*) => View[T]) =
    srf0(name, None, _: _*)

  protected def srf[T](name: String, prefix: String)(implicit man: Manifest[T]): ((ExpressionNode*) => View[T]) =
    srf0(name, Some(prefix), _: _*)

  private def srf0[T](name: String, prefix: Option[String], args: ExpressionNode*)(implicit man: Manifest[T]): View[T] = {
    val typeT = man.runtimeClass.asInstanceOf[Class[T]]
    new SrfView[T](name, typeT, this, prefix, args)
  }
}

class SrfView[T](
    name: String,
    classOfT: Class[T],
    schema: Schema,
    prefix: Option[String],
    args: Iterable[ExpressionNode])
  extends View[T](
    name,
    classOfT,
    schema,
    prefix,
    None) {
  override def viewExpressionNode: ViewExpressionNode[T] = new SrfViewExpressionNode[T](this, args)
}

class SrfViewExpressionNode[T](view: View[T], args: Iterable[ExpressionNode]) extends ViewExpressionNode(view) {
  override def doWrite(sw: StatementWriter) = {
    sw.write(sw.quoteName(view.prefixedName))
    sw.write("(")
    sw.writeNodesWithSeparator(args, ",", false)
    sw.write(")")
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy