packages feed

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 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+        )