Skip to content

Instantly share code, notes, and snippets.

@neowinx
Forked from ruescasd/gist:7911033
Last active August 29, 2015 14:07
Show Gist options
  • Save neowinx/de8fcd51acb6ad3b3ea9 to your computer and use it in GitHub Desktop.
Save neowinx/de8fcd51acb6ad3b3ea9 to your computer and use it in GitHub Desktop.
// optionally filter on a column with a supplied predicate
case class MaybeFilter[X, Y](val query: scala.slick.lifted.Query[X, Y]) {
def filter[T](data: Option[T])(f: T => X => scala.slick.lifted.Column[Boolean]) = {
data.map(v => MaybeFilter(query.filter(f(v)))).getOrElse(this)
}
}
// example use case
def find(id: Option[Int], createdMin: Option[Date], createdMax: Option[Date], modifiedMin: Option[Date], modifiedMax: Option[Date]) = {
val query = MaybeFilter(Query(this))
.filter(id)(v => d => d.id === v)
.filter(createdMin)(v => d => d.created >= v)
.filter(createdMax)(v => d => d.created <= v)
.filter(modifiedMin)(v => d => d.modified >= v)
.filter(modifiedMax)(v => d => d.modified <= v)
.query
query.list
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment