gpt4 book ai didi

scala - Slick - 使用动态 sortBy 编译

转载 作者:行者123 更新时间:2023-12-04 01:15:06 30 4
gpt4 key购买 nike

我知道从 slick 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
}

上面的示例代码是由用户从具有表格布局的 UI 触发的。如果用户单击“名称”标题,则表格应根据“名称”进行排序 - 与“状态”相同。

我无法开始工作的方面是将预编译与动态排序相结合(取决于表布局中单击的标题)。当不预编译查询时,动态排序当然有效。但是由于方法“findXXX”非常复杂,出于性能原因,我肯定需要预编译。关于如何通过动态排序实现预编译的任何提示?

另见: https://groups.google.com/forum/#!topic/scalaquery/my4EYt51qEM

最佳答案

Slick 没有提供一种方法来记住动态 sortBy 的已编译查询。我认为解决这个问题的唯一方法是记住每个排序列的编译查询并根据动态排序键查找查询。即,构建一个映射,其中键是排序列名称,值是该列的 sortBy 编译查询。

当然,如果您编译的查询具有连接并且您想对正在连接的表中的列进行排序,那么这对您不起作用。

如果性能不是问题,并且您没有其他理由使用编译查询,请不要使用它们。

关于scala - Slick - 使用动态 sortBy 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27034653/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com