Я новичок в SLICK (2.1) и теряюсь при создании моего первого запроса с использованием union
. Поскольку в конечном итоге параметры предоставляются из внешнего (через веб-интерфейс), я устанавливаю их как необязательные. См. Комментарий в коде ниже. Как создать соответствующий запрос?SLICK: простой запрос с использованием списков объединения и параметров
Мой фактический класс более сложный, который я упростил ради этого вопроса.
case class MyStuff(id: Int, value: Int, text: String)
class MyTable (tag: Tag) extends Table[MyStuff](tag, "MYSTUFF"){
def id = column[Int]("ID", O NotNull)
def value = column[Int]("VALUE", O NotNull)
def text = column[String]("TEXT", O NotNull)
def * =
(id,
value,
text).shaped <> ((MyStuff.apply _).tupled, MyStuff.unapply)
}
object myTable extends TableQuery(new MyTable(_)){
def getStuff(ids: Option[List[Int]], values: Option[List[Int]])(implicit session: Session): Option[List[MyStuff]] = {
/*
1) If 'ids' are given, retrieve all matching entries, if any.
2) If 'values' are given, retrieve all matching entries (if any), union with the results of the previous step, and remove duplicate entries.
4) If neither 'ids' nor 'values' are given, retrieve all entries.
*/
}
}
getStuff называется так:
db: Database withSession { implicit session => val myStuff = myTable.getStuff(...) }
O NotNull не следует писать явно. Это значение по умолчанию в Slick. – cvogt