haskellhdbc

How do you fill in the parameters for an SQL IN placeholder with HDBC?


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?


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, <$>, <$.