Question

I'm trying to do something like this with Database.HDBC.PostgreSQL:

run c "update questions set deleted = now() where question_id in (?)" [toSql ids]

where ids is [Int]. But I get the error

No instance for (Data.Convertible.Base.Convertible [Int] SqlValue)

How do you fill in an IN placeholder with HDBC?

Was it helpful?

Solution

I don't think you can avoid building the query dynamically, but you can still avoid SQL injection and the like.

import Control.Applicative ((<$), (<$>))
import Data.List (intersperse)

let query = "update questions set deleted = now() where question_id in ("
            ++ intersperse ',' ('?' <$ ids)
            ++ ")"
 in run c query (toSql <$> ids)

Links to documentation for intersperse, <$>, <$.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top