Я знаю, что касается slick 2.1. можно использовать ConstColumn для взятия и удаления предварительно скомпилированных запросов с использованием «Compiled».
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
}
Приведенный выше пример кода запускается пользователем из пользовательского интерфейса с табличным макетом. Если пользователь нажимает на заголовок «имя», то таблица должна быть отсортирована по «имени» — то же самое для «состояния».
Аспект, который я не могу приступить к работе, - это объединить предварительную компиляцию с динамической сортировкой (в зависимости от щелкнутого заголовка в макете таблицы). Динамическая сортировка, конечно, работает без предварительной компиляции запроса. Но поскольку метод «findXXX» довольно сложен, мне определенно нужно выполнить предварительную компиляцию из соображений производительности. Любой намек на то, как добиться предварительной компиляции с динамической сортировкой?
См. также: https://groups.google.com/forum/#!topic/scalaquery/my4EYt51qEM
ConstColumn[String]
, но думаю, это не сработает. лучше всего использовать скомпилированный запрос для сортировки и использовать карту для их поиска, что решает вашу проблему - предположим, это то, что вы использовали? думаю, трудно написать, не повторяя какой-то код, но все же он должен быть довольно компактным. как я сделать предложение? - person Ossip   schedule 21.10.2019