Want to map MySQL INT bitmask to Slick.
I've found this but have little problem how to use it
https://github.com/nafg/slick-additions/blob/master/src/main/scala/scala/slick/additions/Enum.scala
Any help how should I define object for i.e.
mysql column INT(3) with Enum containing 3 values: lets name them a,b,c here.
I solved the problem with Enums in the following way (taking your values for an example):
import play.api.db.slick.DB
import play.api.db.slick.Config.driver.simple._
sealed trait MyEnum
case object MyEnumA extends MyEnum
case object MyEnumB extends MyEnum
case object MyEnumC extends MyEnum
object MyEnumMapper {
val string_enum_mapping:Map[String,MyEnum] = Map(
"a" -> MyEnumA,
"b" -> MyEnumB,
"c" -> MyEnumC
)
val enum_string_mapping:Map[MyEnum,String] = string_enum_mapping.map(_.swap)
implicit val myEnumStringMapper = MappedTypeMapper.base[MyEnum,String](
e => enum_string_mapping(e),
s => string_enum_mapping(s)
)
}
import MyEnumMapper._
case class MyData(
......
enumValue: MyEnum,
.....
)
................
object MyDataTable extends Table[MyData]("<table_name>") {
......
def enumValue = column[MyEnum]("<field_name>")
.....
.... /* whatever lifted or direct slick calls you want */
}
If works for me in both Play 2.1 and Play 2.2, Slick 1.0.0 and MariaDB 5.5 (same as MySQL)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With