(使用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()))
在将 Quill 与 JDBC 和 Postgres 结合使用时,您似乎遇到了如何在查询中绑定参数的问题。
错误“列索引超出范围:1,列数:0。”通常在 JDBC 驱动程序未正确处理参数绑定时出现。
尝试更改将 paperId 传递到查询中的方式,以确保其插值正确。您可以在中缀中使用 concat 来安全地处理动态值:
val q = quote {
auditDb.filter(row => infix"${row.rowData} @> ('paper_id=>' || ${lift(paperId)})".as[Boolean])
}