postgresql - 对 Hasql 查询的参数列表进行编码

标签 postgresql haskell contravariance hasql

我正在尝试获取Hasql对“select ... where in”查询的列表进行编码。如果我使用 contravariant-extras 中的 contramany ,它会进行类型检查,但我在运行时遇到语法错误。

import qualified Database.Encoders as E
import Contravariant.Extras

getTeamMembership :: Query [TeamId] [(TeamId, EmployeeId)]
getTeamMembership = statement q enc def True
  where
    enc = contramany (E.value E.teamId)
    q = "select workteam, employee \
        \from workteam_employee where workteam in $1"

是否无法对参数列表进行编码?

最佳答案

“IN”运算符不支持这一点。您只能用它指定单个值(例如,IN ($1, $2, $3))。然而,您想要的东西可以通过数组编码器以及 anyall Postgres 函数轻松实现,如 the docs 所示。 .

some Hasql tests showing it in action .

还有a discussion on that subject在问题跟踪器上。

关于postgresql - 对 Hasql 查询的参数列表进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42138062/

相关文章:

ruby-on-rails - 如何将 Rails 应用程序从使用 MongoDB 迁移到 PostgreSQL?

c# - 在撰写评论时在用户之间建立关系

c# - 为什么即使 IScreen 实现了 IRenderable,我也无法从 List<IScreen> 转换为 List<IRenderable>?

c# - Casting List<T> - 协方差/逆变问题

mysql - 在 Laravel 中将 SQL 转换为 Eloquent 或其他数据库引擎

node.js - Sequelize,原始查询按 daterange

networking - Haskell 套接字编程 - 内存泄漏

scala - 是否有 `Optional` 的 van Laarhoven 表示

scala - 在 scala 中定义 Haskell FixF

scala - 在 Scala 中在运行时对协变和逆变类进行有效的类型转换