packages feed

mongoDB 2.3.0.1 → 2.3.0.2

raw patch · 3 files changed

+27/−8 lines, 3 files

Files

CHANGELOG.md view
@@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. This project adheres to [Package Versioning Policy](https://wiki.haskell.org/Package_versioning_policy). +## [2.3.0.2] - 2018-01-28++### Fixed+- Uploading files with GridFS+ ## [2.3.0.1] - 2017-12-28  ### Removed
Database/MongoDB/GridFS.hs view
@@ -3,7 +3,7 @@ -- | MongoDB GridFS implementation {-# LANGUAGE OverloadedStrings, RecordWildCards, NamedFieldPuns, TupleSections, FlexibleContexts, FlexibleInstances, UndecidableInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, StandaloneDeriving, TypeSynonymInstances, TypeFamilies, CPP, RankNTypes #-} -module Database.MongoDB.GridFS +module Database.MongoDB.GridFS   ( Bucket   , files, chunks   , File@@ -24,11 +24,11 @@   where  import Control.Applicative((<$>))-import Control.Concurrent(forkIO)+ import Control.Monad(when) import Control.Monad.IO.Class import Control.Monad.Trans(MonadTrans, lift)-import Control.Monad.Trans.Resource(MonadResource(..))+ import Data.Conduit import Data.Digest.Pure.MD5 import Data.Int@@ -40,13 +40,17 @@ import qualified Data.Bson as B import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as L-import qualified Data.Conduit.Binary as BI-import qualified Data.Conduit.List as CL + defaultChunkSize :: Int64 -- ^ The default chunk size is 256 kB defaultChunkSize = 256 * 1024 +-- magic constant for md5Finalize+md5BlockSizeInBytes :: Int+md5BlockSizeInBytes = 64++ data Bucket = Bucket {files :: Text, chunks :: Text} -- ^ Files are stored in "buckets". You open a bucket with openDefaultBucket or openBucket @@ -125,12 +129,12 @@   , fwAcc :: L.ByteString   , fwMd5Context :: MD5Context   , fwMd5acc :: L.ByteString-  } +  }  -- Finalize file, calculating md5 digest, saving the last chunk, and creating the file in the bucket finalizeFile :: (Monad m, MonadIO m) => Text -> FileWriter -> Action m File finalizeFile filename (FileWriter chunkSize bucket files_id i size acc md5context md5acc) = do-  let md5digest = md5Finalize md5context (L.toStrict md5acc)+  let md5digest = finalizeMD5 md5context (L.toStrict md5acc)   when (L.length acc > 0) $ putChunk bucket files_id i acc   timestamp <- liftIO $ getCurrentTime   let doc = [ "_id" =: files_id@@ -142,6 +146,16 @@             ]   insert_ (files bucket) doc   return $ File bucket doc++-- finalize the remainder and return the MD5Digest.+finalizeMD5 :: MD5Context -> S.ByteString -> MD5Digest+finalizeMD5 ctx rest =+  md5Finalize ctx2 (S.drop lu rest) -- can only handle max md5BlockSizeInBytes length+  where+    l = S.length rest+    r = l `mod` md5BlockSizeInBytes+    lu = l - r+    ctx2 = md5Update ctx (S.take lu rest)  -- Write as many chunks as can be written from the file writer writeChunks :: (Monad m, MonadIO m) => FileWriter -> L.ByteString -> Action m FileWriter
mongoDB.cabal view
@@ -1,5 +1,5 @@ Name:           mongoDB-Version:        2.3.0.1+Version:        2.3.0.2 Synopsis:       Driver (client) for MongoDB, a free, scalable, fast, document                 DBMS Description:    This package lets you connect to MongoDB servers and