在 quill 中同时使用 infix 和 lift 进行 hstore 查询

问题描述 投票:0回答:1

(使用jdbc postgres驱动程序和quill)

我有一个库需要使用“@>”运算符查询 hstore 字段。使用 Infix,我构建了以下内容:

 val q = quote{ auditDb.filter(row => infix"${row.rowData} @> 'paper_id=>${lift(paperId)}'".as[Boolean]) }

但是尝试运行此查询会导致“列索引超出范围:1,列数:0”。错误。

使用硬编码的 paperId 运行相同的查询效果很好。

auditDb.filter(row => infix"${row.rowData} @> 'paper_id=><some number>'".as[Boolean])

以下查询也可以工作,但速度很慢。

auditDb.filter(row => infix"${row.rowData} -> 'paper_id'".as[String] == lift(paperId.toString()))

postgresql scala hstore quill.io
1个回答
0
投票

在将 Quill 与 JDBC 和 Postgres 结合使用时,您似乎遇到了如何在查询中绑定参数的问题。

错误“列索引超出范围:1,列数:0。”通常在 JDBC 驱动程序未正确处理参数绑定时出现。

尝试更改将 paperId 传递到查询中的方式,以确保其插值正确。您可以在中缀中使用 concat 来安全地处理动态值:

val q = quote {
  auditDb.filter(row => infix"${row.rowData} @> ('paper_id=>' || ${lift(paperId)})".as[Boolean])
}
© www.soinside.com 2019 - 2024. All rights reserved.