2013-07-09 23 views
16

İsteğe bağlı bir tarih sütunu Scala Slick 1.0.1 ile filtrelenmeye çalışıyorum.Seçenek sütunlarına göre bulanıklık ve filtreleme

Önemli olan, yolu görmüyorum olabilir, ama ben şuna benzer bir tablo var:

case class UserRole(id:UUID, userID:UUID, role:String) 
object UserRole extends Table[UserRole]("User_Role") { 

    //(id: Long = 0l, name: String, active: Boolean) extends KeyedEntity[Long] { 
    def id = column[UUID]("ID", O.PrimaryKey) 
    def userID = column[UUID]("user_id") 
    def vendorID = column[UUID]("vendor_id") 
    def role = column[String]("role") 
    def user = foreignKey("user_FK", userID, User)(_.id) 

    def start = column[java.sql.Date]("startDate") 
    def endDate = column[Option[java.sql.Date]]("endDate") 

    def * = id ~ userID ~ role <> (UserRole.apply _, UserRole.unapply _) 
} 

Sen endDate isteğe bağlı olduğunu orada göreceksiniz.

Niçin filtreleyeceğim bir sorguyu nasıl yapılandırabilirim? Sonucu NULL/None veya geçerli (db) tarihlerden daha büyük olabilir mi? Bilginize, ben genelde gömülü API, bu (null.asInstanceOf hakkında kısım) hoş değil

sayesinde

cevap

11

kullanıyorum, ama işe yarayacak. Eski bir Scala Sorgu görevinden bu fikri var, o yüzden kaygan hiç bunun için de daha iyi bir şey koyarsanız bilmiyorum ama sorgulamasından elde edilen selectStatement baktığında, doğru baktı:

val now = new java.sql.Date(System.currentTimeMillis()) 
val query = for { 
    role <- UserRole 
    if (role.endDate === null.asInstanceOf[Option[java.sql.Date]] || role.endDate > now) 
} yield role 

@MartinKolinek tarafından yorumuna DÜZENLEME

sayesinde bu kod aynı zamanda çalışmak ve daha temiz ve şeyler yapmak için muhtemelen daha iyi bir yoldur olacaktır:

val now = new java.sql.Date(System.currentTimeMillis()) 
val query = for { 
    role <- UserRole 
    if (role.endDate.isNull || role.endDate > now) 
} yield role 
+5

role.isNull da ben w düşünüyorum –

+3

çalışacak e Slick API'sine isEmpty eklemeli, böylece Scala Option API'sine uyuyoruz. – cvogt

+1

@cvogt, kabul edildi, orada olmadığında gerçekten şaşırdım ... – cmbaxter

İlgili konular