scala - Slick y filtrado por columnas de opción
scalaquery (1)
Esto no es bonito (la parte sobre null.asInstanceOf
), pero creo que funcionará. Obtuve esa idea de una antigua publicación de Scala Query, así que no sé si slick alguna vez puso algo mejor en eso, pero cuando miré la selectStatement
de selectStatement
resultante de la consulta, se veía correcta:
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
EDITAR
Gracias al comentario de @MartinKolinek, este código también funcionará y es mucho más limpio y probablemente la mejor manera de hacer las cosas:
val now = new java.sql.Date(System.currentTimeMillis())
val query = for {
role <- UserRole
if (role.endDate.isNull || role.endDate > now)
} yield role
Estoy tratando de filtrar contra una columna de fecha opcional con Scala Slick 1.0.1.
Puede que simplemente no lo vea, pero tengo una tabla que se parece a esto:
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 _)
}
Verás allí que la fecha final es opcional.
¿Cómo construyo una consulta donde filtre para que endDate pueda ser NULL / None o mayor que la fecha actual (db)? Para su información, en general estoy usando la API incrustada
Gracias