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

org.scalaquery.meta.MForeignKey.scala Maven / Gradle / Ivy

package org.scalaquery.meta

import java.sql._
import org.scalaquery.{ResultSetInvoker, UnitInvoker}
import org.scalaquery.ql.ForeignKeyAction
import org.scalaquery.session._

/**
 * A wrapper for a row in the ResultSet returned by
 * DatabaseMetaData.getImportedKeys/getExportedKeys/getCrossReference().
 */
case class MForeignKey(
  pkTable: MQName, pkColumn: String, fkTable: MQName, fkColumn: String,
  keySeq: Short, updateRule: ForeignKeyAction, deleteRule: ForeignKeyAction,
  fkName: Option[String], pkName: Option[String], deferrability: Short)

object MForeignKey {

  def getImportedKeys(table: MQName): UnitInvoker[MForeignKey] =
    createInvoker(_.metaData.getImportedKeys(table.catalog_?, table.schema_?, table.name))

  def getExportedKeys(table: MQName): UnitInvoker[MForeignKey] =
    createInvoker(_.metaData.getExportedKeys(table.catalog_?, table.schema_?, table.name))

  def getCrossReference(parentTable: MQName, foreignTable: MQName): UnitInvoker[MForeignKey] =
    createInvoker(_.metaData.getCrossReference(
      parentTable.catalog_?, parentTable.schema_?, parentTable.name,
      foreignTable.catalog_?, foreignTable.schema_?, foreignTable.name))

  private[this] def createInvoker(f: Session => ResultSet) = ResultSetInvoker[MForeignKey](f) { r =>
    MForeignKey(MQName.from(r), r<<, MQName.from(r), r<<, r<<, fkActionFor(r<<), fkActionFor(r<<), r<<, r<<, r<<)
  }

  private[this] def fkActionFor(v: Short) = v match {
    case DatabaseMetaData.importedKeyNoAction => ForeignKeyAction.NoAction
    case DatabaseMetaData.importedKeyCascade => ForeignKeyAction.Cascade
    case DatabaseMetaData.importedKeySetNull => ForeignKeyAction.SetNull
    case DatabaseMetaData.importedKeySetDefault => ForeignKeyAction.SetDefault
    case DatabaseMetaData.importedKeyRestrict => ForeignKeyAction.Restrict
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy