diff --git a/Database/MongoDB/Query.hs b/Database/MongoDB/Query.hs index 8649440..3e3bc58 100644 --- a/Database/MongoDB/Query.hs +++ b/Database/MongoDB/Query.hs @@ -449,10 +449,11 @@ insertCommandDocument opts col docs writeConcern = ] takeRightsUpToLeft :: [Either a b] -> [b] -takeRightsUpToLeft l = go l [] +takeRightsUpToLeft l = reverse $ go l [] where + go [] !res = res go ((Right x):xs) !res = go xs (x:res) - go ((Left x):xs) !res = res + go ((Left _):_) !res = res insert' :: (MonadIO m) => [InsertOption] -> Collection -> [Document] -> Action m [Value] @@ -479,6 +480,10 @@ insert' opts col docs = do else rights preChunks chunkResults <- forM chunks (insertBlock opts col) + + let lchunks = lefts preChunks + when ((not $ null lchunks) && ordered) $ do + liftIO $ throwIO $ head lchunks return $ concat chunkResults insertBlock :: (MonadIO m) diff --git a/test/QuerySpec.hs b/test/QuerySpec.hs index 728fd01..c049ebb 100644 --- a/test/QuerySpec.hs +++ b/test/QuerySpec.hs @@ -110,8 +110,8 @@ spec = around withCleanDatabase $ do describe "insertAll" $ do it "inserts documents to the collection and returns their _ids" $ do (_id1:_id2:_) <- db $ insertAll "team" [ ["name" =: "Yankees", "league" =: "American"] - , ["name" =: "Dodgers", "league" =: "American"] - ] + , ["name" =: "Dodgers", "league" =: "American"] + ] result <- db $ rest =<< find (select [] "team") result `shouldBe` [["_id" =: _id1, "name" =: "Yankees", "league" =: "American"] ,["_id" =: _id2, "name" =: "Dodgers", "league" =: "American"]