postgresql-orm 0.3.2 → 0.4.0
raw patch · 2 files changed
+38/−30 lines, 2 filesdep +bytestring-builderdep ~blaze-builderPVP ok
version bump matches the API change (PVP)
Dependencies added: bytestring-builder
Dependency ranges changed: blaze-builder
API changes (from Hackage documentation)
Files
- Database/PostgreSQL/Escape.hs +28/−27
- postgresql-orm.cabal +10/−3
Database/PostgreSQL/Escape.hs view
@@ -14,9 +14,10 @@ , buildAction, buildLiteral, buildByteA, buildIdent ) where -import Blaze.ByteString.Builder-import Blaze.ByteString.Builder.Char8 (fromChar)-import Blaze.ByteString.Builder.Internal+import Blaze.ByteString.Builder.Internal.Write+import Data.ByteString.Builder+import Data.ByteString.Builder.Internal+import Data.ByteString.Lazy (toStrict) import qualified Data.ByteString as S import qualified Data.ByteString.Internal as S import qualified Data.ByteString.Unsafe as S@@ -89,10 +90,10 @@ -> (Word8 -> Builder) -> S.ByteString -> Builder {-# INLINE quoter #-} quoter start end escPred escFn bs0 =- mconcat [copyByteString start, escaped bs0, copyByteString end]+ mconcat [byteStringCopy start, escaped bs0, byteStringCopy end] where escaped bs = case fastBreak escPred bs of- (h, t) | S.null t -> fromByteString h- | otherwise -> fromByteString h <>+ (h, t) | S.null t -> byteString h+ | otherwise -> byteString h <> escFn (S.unsafeHead t) <> escaped (S.unsafeTail t) @@ -106,7 +107,7 @@ isSpecial 63## = True -- '?' isSpecial 92## = True -- '\\' isSpecial _ = False- esc c = copyByteString $ case () of+ esc c = byteStringCopy $ case () of _ | c == c2b '"' -> "\"\"" | c == c2b '?' -> "\\003f" | c == c2b '\\' -> "\\\\"@@ -114,12 +115,12 @@ -- | Build a quoted identifier. Generally you will want to use -- 'quoteIdent', and for repeated use it will be faster to use--- @'fromByteString' . 'quoteIdent'@, but this internal function is+-- @'byteString' . 'quoteIdent'@, but this internal function is -- exposed in case it is useful. buildIdent :: S.ByteString -> Builder buildIdent ident | Just _ <- fastFindIndex isQuestionmark ident = uBuildIdent ident- | otherwise = quoter "\"" "\"" isDQuote (const $ copyByteString "\"\"") ident+ | otherwise = quoter "\"" "\"" isDQuote (const $ byteStringCopy "\"\"") ident where isQuestionmark 63## = True isQuestionmark 0## = error "quoteIdent: illegal NUL character" isQuestionmark _ = False@@ -157,7 +158,7 @@ -- See 'Id' for a convenient way to include quoted identifiers in -- parameter lists. quoteIdent :: S.ByteString -> S.ByteString-quoteIdent = toByteString . buildIdent+quoteIdent = toStrict . toLazyByteString . buildIdent hexNibblesPtr :: Ptr Word8 {-# NOINLINE hexNibblesPtr #-}@@ -193,8 +194,8 @@ isSpecial 63## = True -- '?' isSpecial 92## = True -- '\\' isSpecial b = cmpres(b `geWord#` 128##)- esc b | b == c2b '\'' = copyByteString "''"- | b == c2b '\\' = copyByteString "\\\\"+ esc b | b == c2b '\'' = byteStringCopy "''"+ | b == c2b '\\' = byteStringCopy "\\\\" | otherwise = hexCharEscBuilder b @@ -206,18 +207,18 @@ buildByteA :: S.ByteString -> Builder buildByteA bs = equote $- fromBuildStepCont $ \cont (BufRange (Ptr bb0) (Ptr be0)) ->- S.unsafeUseAsCStringLen bs $ \(Ptr inptr0, I# inlen0) -> do- let ine = plusAddr# inptr0 inlen0- fill oute inp outp- | cmpres(inp `geAddr#` ine) = cont (BufRange (Ptr outp) (Ptr oute))- | cmpres(plusAddr# outp 2# `geAddr#` oute) = return $- bufferFull (2 * (I# (ine `minusAddr#` inp)) + 1) (Ptr outp) $- \(BufRange (Ptr bb) (Ptr be)) -> fill be inp bb- | otherwise = do copyByteToNibbles inp outp- fill oute (inp `plusAddr#` 1#) (outp `plusAddr#` 2#)- fill be0 inptr0 bb0- where equote b = mconcat [fromByteString " E'\\\\x", b, fromChar '\'']+ builder $ \cont (BufferRange (Ptr bb0) (Ptr be0)) ->+ S.unsafeUseAsCStringLen bs $ \(Ptr inptr0, I# inlen0) -> do+ let ine = plusAddr# inptr0 inlen0+ fill oute inp outp+ | cmpres(inp `geAddr#` ine) = cont (BufferRange (Ptr outp) (Ptr oute))+ | cmpres(plusAddr# outp 2# `geAddr#` oute) = return $+ bufferFull (2 * (I# (ine `minusAddr#` inp)) + 1) (Ptr outp) $+ \(BufferRange (Ptr bb) (Ptr be)) -> fill be inp bb+ | otherwise = do copyByteToNibbles inp outp+ fill oute (inp `plusAddr#` 1#) (outp `plusAddr#` 2#)+ fill be0 inptr0 bb0+ where equote b = mconcat [byteString " E'\\\\x", b, char8 '\''] @@ -238,8 +239,8 @@ intercatlate _ _ = error $ "buildSql: wrong number of parameters for " ++ show template split s = case S.break (== c2b '?') s of- (h,t) | S.null t -> [fromByteString h]- | otherwise -> fromByteString h : split (S.unsafeTail t)+ (h,t) | S.null t -> [byteString h]+ | otherwise -> byteString h : split (S.unsafeTail t) -- | A builder version of 'fmtSql', possibly useful if you are about -- to concatenate various individually formatted query fragments and@@ -266,4 +267,4 @@ -- apostrophe, when you probably wanted two strings. fmtSql :: (ToRow p) => Query -> p -> Query {-# INLINE fmtSql #-}-fmtSql q p = Query $ toByteString $ buildSql q p+fmtSql q p = Query $ toStrict . toLazyByteString $ buildSql q p
postgresql-orm.cabal view
@@ -1,5 +1,5 @@ name: postgresql-orm-version: 0.3.2+version: 0.4.0 cabal-version: >= 1.14 build-type: Simple license: GPL@@ -18,8 +18,9 @@ Main-is: pg_migrate.hs ghc-options: -Wall build-depends: base < 6- , blaze-builder < 0.4+ , blaze-builder >= 0.4 , bytestring+ , bytestring-builder , directory , filepath , ghc-prim@@ -33,8 +34,9 @@ default-language: Haskell2010 build-depends: base < 6 , aeson- , blaze-builder < 0.4+ , blaze-builder > 0.4 , bytestring+ , bytestring-builder , directory , filepath , ghc-prim@@ -73,3 +75,8 @@ , ScopedTypeVariables , TypeOperators , UndecidableInstances++source-repository head+ type: git+ location: https://github.com/alevy/postgresql-orm.git+