packages feed

postgresql-placeholder-converter 0.1.0.0 → 0.2.0.0

raw patch · 5 files changed

+45/−27 lines, 5 filesdep +either-resultdep ~basePVP ok

version bump matches the API change (PVP)

Dependencies added: either-result

Dependency ranges changed: base

API changes (from Hackage documentation)

- Database.PostgreSQL.Placeholder.Convert: convertQuestionMarkStyleToDollarSignStyle :: ByteString -> Either String ByteString
+ Database.PostgreSQL.Placeholder.Convert: convertQuestionMarkStyleToDollarSignStyle :: MonadFail m => ByteString -> m ByteString

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history +## 0.2.0.0 -- 2021-03-19++- Use `MonadFail` as interface.+ ## 0.1.0.0 -- 2020-06-29  - Released.
postgresql-placeholder-converter.cabal view
@@ -1,7 +1,7 @@ cabal-version:       2.2  name:                postgresql-placeholder-converter-version:             0.1.0.0+version:             0.2.0.0 author:              Kazuki Okamoto copyright:           2020 Kazuki Okamoto, 2019 IIJ Innovation Institute Inc. license:             BSD-3-Clause@@ -19,7 +19,7 @@                      CHANGELOG.md  common common-  build-depends:       base >= 4.12 && < 4.15+  build-depends:       base >= 4.11 && < 4.15   default-language:    Haskell2010  library@@ -29,6 +29,7 @@   other-modules:       Database.PostgreSQL.Placeholder.Convert.QuestionToDollar   build-depends:       attoparsec,                        bytestring,+                       either-result,                        mtl,                        utf8-string   ghc-options:         -Wall
src/Database/PostgreSQL/Placeholder/Convert.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE CPP               #-}+ module Database.PostgreSQL.Placeholder.Convert   ( convertQuestionMarkStyleToDollarSignStyle   , QD.splitQueries@@ -7,5 +9,10 @@  import Data.ByteString (ByteString) -convertQuestionMarkStyleToDollarSignStyle :: ByteString-> Either String ByteString+#if !MIN_VERSION_base(4,13,0)+import           Control.Monad.Fail               (MonadFail)+#endif++-- | Convert question mark style to dollar sign style of PostgreSQL SQL.+convertQuestionMarkStyleToDollarSignStyle :: MonadFail m => ByteString -> m ByteString convertQuestionMarkStyleToDollarSignStyle = QD.convert
src/Database/PostgreSQL/Placeholder/Convert/QuestionToDollar.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP               #-} {-# LANGUAGE OverloadedStrings #-}  module Database.PostgreSQL.Placeholder.Convert.QuestionToDollar@@ -15,27 +16,32 @@ import           Data.ByteString                  (ByteString) import qualified Data.ByteString                  as BS import qualified Data.ByteString.UTF8             as BSU+import qualified Data.Either.Result               as R --- | Convert question mark style to dollar sign style of PostgreSQL SQL.-convert :: ByteString-> Either String ByteString+#if !MIN_VERSION_base(4,13,0)+import           Control.Monad.Fail               (MonadFail)+#endif++convert :: MonadFail m => ByteString -> m ByteString convert q =-  flip AP.parseOnly q $-    flip evalStateT 1 $-      (mconcat <$>) $ do-        ss <--          AP.many' $-            AP.choice-              [ question-              , lift questionLiteral-              , lift singleQuoteLiteral-              , lift doubleQuoteLiteral-              , lift dollarQuoteLiteral-              , lift lineComment-              , lift blockComment-              , lift $ BS.pack . (:[]) <$> AP.anyWord8-              ]-        lift AP.endOfInput-        pure ss+  R.toMonadFail $ R.fromEither $+    flip AP.parseOnly q $+      flip evalStateT 1 $+        (mconcat <$>) $ do+          ss <-+            AP.many' $+              AP.choice+                [ question+                , lift questionLiteral+                , lift singleQuoteLiteral+                , lift doubleQuoteLiteral+                , lift dollarQuoteLiteral+                , lift lineComment+                , lift blockComment+                , lift $ BS.pack . (:[]) <$> AP.anyWord8+                ]+          lift AP.endOfInput+          pure ss  singleQuoteLiteral :: AP.Parser BS.ByteString singleQuoteLiteral = oneCharQuoteLiteral '\'' <?> "singleQuoteLiteral"
test/Database/PostgreSQL/Placeholder/ConvertSpec.hs view
@@ -10,16 +10,16 @@ spec = do   describe "convertQuestionMarkStyleToDollarSignStyle" $ do     it "SELECT * FROM person" $ do-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person" `shouldBe` Right "SELECT * FROM person"+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person" `shouldReturn` "SELECT * FROM person"      it "SELECT * FROM person WHERE id = ?" $ do-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE id = ?" `shouldBe` Right "SELECT * FROM person WHERE id = $1"+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE id = ?" `shouldReturn` "SELECT * FROM person WHERE id = $1"      it "SELECT * FROM person WHERE name = '?'" $ do-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = '?'" `shouldBe` Right "SELECT * FROM person WHERE name = '?'"+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = '?'" `shouldReturn` "SELECT * FROM person WHERE name = '?'"      it "SELECT * FROM person WHERE name = $$?$$" $ do-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = $$?$$" `shouldBe` Right "SELECT * FROM person WHERE name = $$?$$"+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = $$?$$" `shouldReturn` "SELECT * FROM person WHERE name = $$?$$"      it "SELECT * FROM person WHERE name = $name$?$name$" $ do-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = $name$?$name$" `shouldBe` Right "SELECT * FROM person WHERE name = $name$?$name$"+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = $name$?$name$" `shouldReturn` "SELECT * FROM person WHERE name = $name$?$name$"