gpt4 book ai didi

scala - 具有动态条件的 Slick 普通 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 07:52:14 31 4
gpt4 key购买 nike

我正在努力将其他条件附加到我的查询中。以最简单的形式,我需要的是如下所示:

def findPeople(name: String, maybeSurname: Option[String]) = {
val sql1 = sql"select * from my_table where name = $name"
val sql2 = maybeSurname.map( surname => sql"and col2 = $surname" ).getOrElse(sql"")
val finalSql = sql1 + sql2 // I need this kind of feature
...
...
}

使用 #$可能是一个选项,但是 surname 不会是绑定(bind)变量,这是一个大问题。

最佳答案

这是 slick 3.1.x 上的示例测试

import slick.jdbc.{SQLActionBuilder, SetParameter, PositionedParameters}

object SlickKit {

implicit class SQLActionBuilderConcat (a: SQLActionBuilder) {
def concat (b: SQLActionBuilder): SQLActionBuilder = {
SQLActionBuilder(a.queryParts ++ b.queryParts, new SetParameter[Unit] {
def apply(p: Unit, pp: PositionedParameters): Unit = {
a.unitPConv.apply(p, pp)
b.unitPConv.apply(p, pp)
}
})
}
}
}

进而
import SlickKit._
val sql1 =
sql"""
select count(*) from idinfo_#$i
"""

val sql2 =
sql"""
where source=$source
"""

val sql = sql1 concat sql2

sql.as[Int].head

关于scala - 具有动态条件的 Slick 普通 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32861818/

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