Я знаю, как на пятно 2.1. можно использовать ConstColumn для взятия и отбрасывания предварительно скомпилированного запроса, используя "Скомпилированный".
private val findXXXCompiled = Compiled {
(someId:Column[Long], sortBy:???, drop:ConstColumn[Long], take:ConstColumn[Long]) =>
val q = findXXX(someId) // returns a Query
// I want to use query composition on "q" in order to further restrict my result:
q.sortBy {
case (_, name, state) => sortBy match {
case ??? => name.asc
case ??? => name.desc
case ??? => state.asc
case ??? => state.desc
}
}.drop(drop).take(take) // possible since slick 2.1. as described above using type ConstColumn
}
Приведенный выше пример кода запускается пользователем из пользовательского интерфейса с макетом таблицы. Если пользователь нажимает на заголовок "name", то таблица должна быть отсортирована по "name" - то же самое для "state".
Аспект, который я не могу получить, заключается в том, чтобы объединить предварительную компиляцию с динамической сортировкой (удаление по нажатому заголовку в макете таблицы). Динамическая сортировка, конечно, работает, когда не выполняется предварительная компиляция запроса. Но так как метод "findXXX" довольно сложный, мне определенно нужно прекомпилировать его из соображений производительности. Есть подсказка, как добиться предварительной компиляции с помощью динамической сортировки?
Смотрите также: https://groups.google.com/forum/#!topic/scalaquery/my4EYt51qEM