2

我试图让Hasql为“选择......在哪里”查询编码一个列表。如果我使用contramanyfrom contravariant-extras,它会进行类型检查,但在运行时出现语法错误。

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"

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

4

1 回答 1

2

“IN”运算符不支持这一点。您只能使用它指定单个值(例如,IN ($1, $2, $3))。但是,根据文档any,使用 Array 编码器和allPostgres 函数可以轻松实现您想要的。

一些 Hasql 测试显示了它的作用

在问题跟踪器上也有关于该主题的讨论。

于 2017-02-09T20:57:42.213 回答