2017-02-09 14 views
2

Hasql에 "select ... where in"쿼리에 대한 목록을 인코딩하려고합니다. 내가 contravariant-extras에서 contramany을 사용하면 typechecks하지만 런타임에 구문 오류가 발생합니다.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