【问题标题】:Encoding a Parameter List for a Hasql query为 Hasql 查询编码参数列表
【发布时间】:2017-02-09 13:31:38
【问题描述】:

我试图让Hasql 为“选择...在哪里”查询编码一个列表。它会检查我是否使用来自contravariant-extrascontramany,但在运行时出现语法错误。

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"

不能对参数列表进行编码吗?

【问题讨论】:

    标签: postgresql haskell contravariance hasql


    【解决方案1】:

    “IN”运算符不支持这一点。您只能使用它指定单个值(例如,IN ($1, $2, $3))。然而,你想要的很容易通过数组编码器和anyall Postgres 函数来实现,就像the docs 一样。

    some Hasql tests showing it in action

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

    【讨论】:

    • 谢谢你的作品!而不是 contramany (E.value E.teamId) 我现在有:E.value (E.array (E.arrayDimension foldl' (E.arrayValue E.teamId)))
    猜你喜欢
    • 2011-09-06
    • 2023-02-11
    • 1970-01-01
    • 2014-11-15
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多