2017-02-09 8 views
2

Hasqlを取得して、「select ... where in」クエリのリストをエンコードしようとしています。 contramanycontravariant-extrasから使用しているかどうかをタイプチェックしますが、実行時に構文エラーが発生します。Hasqlクエリのパラメータリストをエンコードする

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" 

パラメータリストをエンコードすることはできませんか?

答えて

2

"IN"演算子はこれをサポートしていません。個別の値はその値でのみ指定できます(例:IN ($1, $2, $3))。しかし、あなたが望むものは、the docsのように、配列エンコーダーとanyall Postgres関数で簡単に達成できます。

some Hasql tests showing it in actionがあります。

問題トラッカーにはa discussion on that subjectもあります。

+0

ありがとうございます! 'contamany(E.value E.teamId) 'の代わりに' Evalue(E.array(E.arrayDimension foldl)(E.arrayValue E.teamId))) ') – Mikkel

関連する問題