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

e.jdbc-scala_2.13.1.0.52.source-code.Execution.scala Maven / Gradle / Ivy

There is a newer version: 1.2.9
Show newest version
package acolyte.jdbc

import acolyte.jdbc.ParameterMetaData.ParameterDef

/** Execution information */
sealed trait Execution {
  /** Executed SQL */
  def sql: String

  /** Execution parameters */
  def parameters: List[ExecutedParameter]
}

/**
 * Information about the execution of a query.
 *
 * @param sql the SQL statement
 * @param parameter the parameters the query is executed with
 */
case class QueryExecution(
    sql: String, parameters: List[ExecutedParameter] = Nil) extends Execution

case class UpdateExecution(
    sql: String, parameters: List[ExecutedParameter] = Nil) extends Execution

/**
 * Statement extractor
 * @param p Statement pattern
 */
case class ExecutedStatement(val p: String) {
  val re = p.r

  def unapply(x: Execution): Option[(String, List[ExecutedParameter])] =
    re.findFirstIn(x.sql).map(_ ⇒ (x.sql → x.parameters))
}

/** Parameter used to executed a query or an update. */
sealed trait ExecutedParameter {
  /** The parameter value */
  def value: Any
}

/** Executed parameter companion */
object ExecutedParameter {
  def apply(v: Any): ExecutedParameter =
    new ExecutedParameter { val value = v }

  def unapply(p: ExecutedParameter): Option[Any] = Some(p.value)
}

/** Parameter along with its definition. */
case class DefinedParameter(
    value: Any, definition: ParameterDef) extends ExecutedParameter {

  override lazy val toString = s"Param($value, ${definition.sqlTypeName})"
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy