/
MForeignKey.scala
38 lines (30 loc) · 1.69 KB
/
MForeignKey.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package slick.jdbc.meta
import java.sql._
import slick.jdbc.{JdbcBackend, ResultSetAction, Invoker}
import slick.model.ForeignKeyAction
/** 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) =
createAction(_.metaData.getImportedKeys(table.catalog_?, table.schema_?, table.name))
def getExportedKeys(table: MQName) =
createAction(_.metaData.getExportedKeys(table.catalog_?, table.schema_?, table.name))
def getCrossReference(parentTable: MQName, foreignTable: MQName) =
createAction(_.metaData.getCrossReference(
parentTable.catalog_?, parentTable.schema_?, parentTable.name,
foreignTable.catalog_?, foreignTable.schema_?, foreignTable.name))
private[this] def createAction(f: JdbcBackend#Session => ResultSet) = ResultSetAction[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
}
}