2014-03-18 38 views
0

這放氣和地圖位映射數據庫列階對象是延續到下面的帖子:有沒有辦法通過光滑

How to combine multiple columns in one case class field when using lifted embedding?

我是位字段的忠實球迷,希望在我使用slick-macros的項目中使用這個邏輯。不幸的是,slick-additions沒有完全更新到slick 2.0,有一個不穩定的分支,實際上甚至不會編譯。我想直接測試上面的邏輯,但最終與以下錯誤:

按照上面的帖子:

trait Bitmasked { 
    type Value 
    def bitFor: Value => Int 
    def forBit: Int => Value 
    def values: Iterable[Value] 
    def longToSet: Long => Set[Value] = 
    bm => values.toSeq.filter(v => 0 != (bm & (1 << bitFor(v)))).toSet 
    def setToLong: Set[Value] => Long = 
    _.foldLeft(0L){ (bm, v) => bm + (1L << bitFor(v)) } 

    implicit lazy val enumTypeMapper: BaseTypeMapper[Value] = 
    MappedTypeMapper.base[Value, Int](bitFor, forBit) 
    implicit lazy val enumSetTypeMapper: BaseTypeMapper[Set[Value]] = 
    MappedTypeMapper.base[Set[Value], Long](setToLong, longToSet) 

    implicit lazy val getResult: GetResult[Value] = 
    GetResult(r => forBit(r.nextInt)) 
    implicit lazy val getSetResult: GetResult[Set[Value]] = 
    GetResult(r => longToSet(r.nextLong)) 
} 

/** Mix this class into a subclass of Enumeration to have it usable as a 
    * column type in a Slick Table. */ 
trait BitmaskedEnumeration extends Bitmasked { this: Enumeration => 
    def bitFor = _.id 
    def forBit = apply(_) 
} 

object Role extends Enumeration with BitmaskedEnumeration { 
    type Role = Value 
    val Editor, Moderator, Administrator, Usermoderator, Usermoderator2, Partner, PremiumPartner, CorporatePaid = Value 
} 

[error] C:\git\slick-macros\database\src\main\scala\model\Database.scala:9: object BaseTypeMapper is not a member of package scala.slick.lifted 
[error] import slick.lifted.{BaseTypeMapper, MappedTypeMapper} 
[error]  ^
[error] C:\git\slick-macros\database\src\main\scala\model\Database.scala:56: not found: value Role 
[error] import Role._ 
[error]  ^
[error] C:\git\slick-macros\database\src\main\scala\model\Database.scala:61: not found: type Role 
[error] case class Member(login: String, rights: UserRights, roles: Role, addr: Address, company: Company, manager: Option[Member]) { 
[error]                ^
[error] three errors found 
[error] (database/compile:compile) Compilation failed 
[error] Total time: 17 s, completed Mar 18, 2014 1:18:30 PM 

有沒有一種方法來位圖數據庫列放氣和映射?例如,當值是1(二進制0001)時,用戶是編輯器,當值是2(二進制0010)時,主持人和當值是3(二進制0011)時都是編輯器和主持人。我想要一種方法來解決這個問題並在Scala中設置標誌。

謝謝你, 沙市

回答

相關問題