From ddb5ba8b64e677b727f45d962b6f50b13b85ccfd Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Sun, 15 Mar 2015 16:28:36 -0700 Subject: [PATCH] Can now post nulls, but header link is wrong affects #166 --- src/PgQuery.hs | 10 +++++++--- test/Feature/InsertSpec.hs | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/PgQuery.hs b/src/PgQuery.hs index 38a230156..b76d43a4c 100644 --- a/src/PgQuery.hs +++ b/src/PgQuery.hs @@ -115,7 +115,7 @@ insertInto t cols vals = B.Stmt ("insert into " <> fromQt t <> " (" <> T.intercalate ", " (map pgFmtIdent cols) <> ") values (" - <> T.intercalate ", " (map ((<> "::unknown") . pgFmtLit . unquoted) vals) + <> T.intercalate ", " (map insertableValue vals) <> ") returning row_to_json(" <> fromQt t <> ".*)") empty True @@ -126,7 +126,7 @@ insertSelect t cols vals = B.Stmt ("insert into " <> fromQt t <> " (" <> T.intercalate ", " (map pgFmtIdent cols) <> ") select " - <> T.intercalate ", " (map ((<> "::unknown") . pgFmtLit . unquoted) vals)) + <> T.intercalate ", " (map insertableValue vals)) empty True update :: QualifiedTable -> [T.Text] -> [JSON.Value] -> PStmt @@ -134,7 +134,7 @@ update t cols vals = B.Stmt ("update " <> fromQt t <> " set (" <> T.intercalate ", " (map pgFmtIdent cols) <> ") = (" - <> T.intercalate ", " (map ((<> "::unknown") . pgFmtLit . unquoted) vals) + <> T.intercalate ", " (map insertableValue vals) <> ")") empty True @@ -233,3 +233,7 @@ unquoted (JSON.Number n) = cs $ formatScientific Fixed (if isInteger n then Just 0 else Nothing) n unquoted (JSON.Bool b) = cs . show $ b unquoted _ = "" + +insertableValue :: JSON.Value -> T.Text +insertableValue JSON.Null = "null" +insertableValue v = ((<> "::unknown") . pgFmtLit . unquoted) v diff --git a/test/Feature/InsertSpec.hs b/test/Feature/InsertSpec.hs index d593421cb..5da14a0e1 100644 --- a/test/Feature/InsertSpec.hs +++ b/test/Feature/InsertSpec.hs @@ -66,6 +66,13 @@ spec = afterAll_ resetDb $ around withApp $ do simpleHeaders p `shouldSatisfy` matchHeader hLocation "/no_pk\\?a=eq.bar&b=eq.baz" simpleStatus p `shouldBe` created201 + it "can post nulls" $ do + p <- request methodPost "/no_pk" + [("Prefer", "return=representation")] + [json| { "a":null, "b":null } |] + liftIO $ + simpleBody p `shouldBe` [json| { "a":null, "b":null } |] + context "with compound pk supplied" . after_ (clearTable "compound_pk") $ it "builds response location header appropriately" $ post "/compound_pk" [json| { "k1":12, "k2":42 } |]