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 +4/−0
- postgresql-placeholder-converter.cabal +3/−2
- src/Database/PostgreSQL/Placeholder/Convert.hs +8/−1
- src/Database/PostgreSQL/Placeholder/Convert/QuestionToDollar.hs +25/−19
- test/Database/PostgreSQL/Placeholder/ConvertSpec.hs +5/−5
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$"