From a22cf82688d894b3898ef516d561c95383900d1d Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Sat, 28 Feb 2015 12:42:32 -0800 Subject: [PATCH] Build sql for inserting multiple rows --- src/App.hs | 2 +- src/PgQuery.hs | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/App.hs b/src/App.hs index 00b3b3cf5..dd9dcd107 100644 --- a/src/App.hs +++ b/src/App.hs @@ -101,7 +101,7 @@ app v1schema reqBody req = ([table], "POST") -> handleJsonObj reqBody $ \obj -> do let qt = QualifiedTable schema (cs table) - query = insertInto qt (map cs $ keys obj) (elems obj) + query = insertInto qt (map cs $ keys obj) [(elems obj)] echoRequested = lookup "Prefer" hdrs == Just "return=representation" row <- H.maybeEx query let (Identity insertedJson) = fromMaybe (Identity "{}" :: Identity Text) row diff --git a/src/PgQuery.hs b/src/PgQuery.hs index bbccfd93a..1f7ef7b65 100644 --- a/src/PgQuery.hs +++ b/src/PgQuery.hs @@ -108,15 +108,20 @@ returningStarT s = s { B.stmtTemplate = B.stmtTemplate s <> " RETURNING *" } deleteFrom :: QualifiedTable -> PStmt deleteFrom t = B.Stmt ("delete from " <> fromQt t) empty True -insertInto :: QualifiedTable -> [T.Text] -> [JSON.Value] -> PStmt +insertInto :: QualifiedTable -> [T.Text] -> [[JSON.Value]] -> PStmt insertInto t [] _ = B.Stmt ("insert into " <> fromQt t <> " default values returning *") empty True insertInto t cols vals = B.Stmt ("insert into " <> fromQt t <> " (" <> T.intercalate ", " (map pgFmtIdent cols) <> - ") values (" - <> T.intercalate ", " (map insertableValue vals) - <> ") returning row_to_json(" <> fromQt t <> ".*)") + ") values " + <> T.intercalate ", " + (map (\v -> "(" + <> T.intercalate ", " (map insertableValue v) + <> ")" + ) vals + ) + <> " returning row_to_json(" <> fromQt t <> ".*)") empty True insertSelect :: QualifiedTable -> [T.Text] -> [JSON.Value] -> PStmt