gpt4 book ai didi

postgresql - 使用 Set[Int] 参数光滑编译查询

转载 作者:行者123 更新时间:2023-11-29 11:56:42 24 4
gpt4 key购买 nike

我有一个以 Seq[Int] 作为参数的查询(并执行像 WHERE x IN (...) 这样的过滤),我需要编译因为这个查询很复杂。但是,当我尝试这种天真的方法时:

Compiled((xs: Set[Int]) => someQuery.filter(_.x inSet xs))

它失败并显示

Computation of type Set[Int] => Query[SomeTable, SomeValue, Seq] cannot be compiled (as type C)

Slick 可以编译以一组整数作为参数的查询吗?

更新:我使用 PostgreSQL 作为数据库,因此可以使用数组代替 IN 子句,但是如何呢?

最佳答案

对于PostgreSQL数据库,解决方案比我想象的要简单得多。

首先,需要一个支持数组的PostgreSQL专用Slick驱动。它通常已经包含在依赖 PgSQL 特性的项目中,所以根本没有问题。我用 this driver .

主要思想是替换普通 SQL IN (...) 子句,该子句采用与列表中项目数量相同的绑定(bind)参数数量,因此 Slick 无法静态编译PgSQL 特定的数组运算符 x = ANY(arr),它只接受数组的一个参数。使用这样的代码很容易:

val compiledQuery = Compiled((x: Rep[List[Int]]) => query.filter(_.id === x.any))

此代码将生成类似 WHERE x = ANY(?) 的查询,它将仅使用一个参数,因此 Slick 将接受它进行编译。

关于postgresql - 使用 Set[Int] 参数光滑编译查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35902030/

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