hasql 1.9.3 → 1.9.3.1
raw patch · 3 files changed
+63/−2 lines, 3 filesdep +testcontainers-postgresqlPVP ok
version bump matches the API change (PVP)
Dependencies added: testcontainers-postgresql
API changes (from Hackage documentation)
Files
- hasql.cabal +4/−1
- hspec/Hasql/ConnectionSpec.hs +48/−0
- library/Hasql/Connection/Config/ConnectionString.hs +11/−1
hasql.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-version: 1.9.3+version: 1.9.3.1 category: Hasql, Database, PostgreSQL synopsis: Fast PostgreSQL driver with a flexible mapping API description:@@ -240,10 +240,13 @@ hs-source-dirs: hspec main-is: Main.hs other-modules:+ Hasql.ConnectionSpec Hasql.PipelineSpec build-tool-depends: hspec-discover:hspec-discover build-depends:+ hasql, hasql:testing-kit, hspec, rerebase >=1 && <2,+ testcontainers-postgresql >=0.0.1 && <0.1,
+ hspec/Hasql/ConnectionSpec.hs view
@@ -0,0 +1,48 @@+module Hasql.ConnectionSpec (spec) where++import Hasql.Connection qualified+import Hasql.Connection.Setting qualified+import Hasql.Connection.Setting.Connection qualified+import Hasql.Connection.Setting.Connection.Param qualified+import Test.Hspec+import TestcontainersPostgresql qualified+import Prelude++spec :: Spec+spec = do+ describe "acquire" do+ let itConnects :: Text -> Text -> Spec+ itConnects username password =+ describe ("username: " <> toList username) do+ describe ("password: " <> toList password) do+ it "connects" do+ TestcontainersPostgresql.run+ ( TestcontainersPostgresql.Config+ { forwardLogs = False,+ distro = TestcontainersPostgresql.Distro17,+ auth = TestcontainersPostgresql.CredentialsAuth username password+ }+ )+ ( \(host, port) -> do+ result <-+ Hasql.Connection.acquire+ [ Hasql.Connection.Setting.connection+ ( Hasql.Connection.Setting.Connection.params+ [ Hasql.Connection.Setting.Connection.Param.host host,+ Hasql.Connection.Setting.Connection.Param.port (fromIntegral port),+ Hasql.Connection.Setting.Connection.Param.user username,+ Hasql.Connection.Setting.Connection.Param.password password+ ]+ )+ ]+ case result of+ Left err -> expectationFailure ("Connection failed: " <> show err <> ". Host: " <> show host <> ", port: " <> show port)+ Right connection -> do+ Hasql.Connection.release connection+ pure ()+ )+ in do+ itConnects "user" "new password"+ itConnects "user" "new\\password"+ itConnects "user" "new'password"+ itConnects "new user" "password"
library/Hasql/Connection/Config/ConnectionString.hs view
@@ -1,6 +1,7 @@ module Hasql.Connection.Config.ConnectionString where import Data.ByteString qualified as B+import Data.ByteString.Char8 qualified as BC import Data.Map.Strict qualified as Map import Data.Text.Encoding qualified import Hasql.Connection.Config.ConnectionString.Params qualified as Params@@ -18,4 +19,13 @@ fromParams = B.intercalate " " . fmap renderParam . Map.toList where- renderParam (k, v) = mconcat [k, "=", v]+ renderParam (k, v) = mconcat [k, "=", "'", escapeSingleQuote v, "'"]++ escapeSingleQuote =+ BC.concatMap+ ( \w ->+ case w of+ '\'' -> BC.pack "\\'"+ '\\' -> BC.pack "\\\\"+ _ -> BC.singleton w+ )